问题描述
我们在 YAML 构建中广泛使用共享的 YAML 模板。像这样:
trigger: none
resources:
repositories:
- repository: templates
type: git
name: DFDevOps\cicd-templates
ref: refs/tags/stable-1
# http://tdc1tfsapp01:8080/tfs/DefaultCollection/DFDevOps/_git/cicd-templates
name: $(BuildVersionPrefix).$(DayOfYear)$(Date:HH)
jobs:
- job: Build
pool:
demands: DotNetFramework
workspace:
clean: outputs
timeoutInMinutes: 180
steps:
- checkout: self # self represents the repo where the initial Pipelines YAML file was found
clean: true
lfs: true
- template: ci/ci-build.yml@templates
parameters:
releaseBranch: $(ReleaseBranch)
但是,共享的 YAML 模板通常需要执行 Powershell 代码。到目前为止,我们要么将其嵌入,要么将其放入模板加载的 PS 模块中。
我讨厌这两种方法。我讨厌嵌入,因为:
- 没有智能
- 无单元测试
- 没有关于管道故障的正确错误报告
我讨厌放入模块,因为它与原点分离并且需要大量开销。
我的问题 - 是否可以将 PS 代码放在与 YAML 模板相同的存储库中的专用 ps1 文件中,并且在运行时可用?
解决方法
因此,checkout: self
将指代该特定管道 YAML 所在的存储库 - 而不是模板存储库(除非它们是相同的)。
我会在管道中添加第二个签出步骤 - checkout: templates
- 然后在您的 powershell 脚本任务的输入中(在模板中),指定您刚刚签出的脚本的路径:
scriptType: filePath
scriptPath: $(Build.SourcesDirectory)/templates/pathToscript.ps1
模板只是在编译时就地扩展到管道中,因此它应该可以访问该文件夹。您现在可以通过下载扩展的管道在 YAML 管道编辑器中验证这一点:Download full YAML