如何通过分支触发以在“阶段”下使用特定模板?
触发:
branches
include:
- ci
- prod
阶段:
模板:ci.yml
condition:and(eq(['build.sourceBranch'],'ci'))
模板:prod.yml
condition:and(eq(['build.sourceBranch'],'prod'))
尝试了以上条件,但无济于事。我遇到了“意外的价值状况”。感谢您的帮助
*****通过将条件作为参数传递给模板尝试了一种解决方案:
阶段:
模板:ci.yml
参数:
condition:and(succeeded(),eq(variables ['Build.SourceBranch'],'refs / heads / ci'))
模板:prod.yml
参数:
condition:and(succeeded(),eq(variables ['Build.SourceBranch'],'refs / heads / prod'))
获取“意外的参数条件”
管道结构:
master.yml(包含运行时参数) 阶段:
模板:ci.yml
参数:
条件:and(succeeded(),eq(variables ['Build.SourceBranch'],'refs / heads / ci'))
模板:prod.yml
参数:
条件:and(succeeded(),eq(variables ['Build.SourceBranch'],'refs / heads / prod'))
ci.yml
阶段:
阶段:BuildApp
阶段:BuildWeb
阶段:DeployLocal
prod.yml
阶段:
阶段:BuildApp
阶段:BuildWeb
阶段:DeployProd
答案 0 :(得分:1)
如何通过分支触发以在“阶段”下使用特定模板?
要解决此问题,我们可以在作业级别添加条件,例如:
stages:
- stage: Test1
jobs:
- job: ci
displayName: ci
pool:
name: MyPrivateAgent
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/ci'))
steps:
- template: ci.yml
- job: prod
displayName: prod
pool:
name: MyPrivateAgent
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/prod'))
steps:
- template: prod.yml
查看文档Specify conditions,了解更多详细信息。
另一方面,我们也可以将条件设置为模板yml的参数,例如:
- template: ci.yml
parameters:
doTheThing: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/ci'))
模板yml文件:
# template.yml
parameters:
doTheThing: 'false'
steps:
- script: echo This always happens!
displayName: Always
- script: echo Sometimes this happens!
condition: ${{ parameters.doTheThing }}
displayName: Only if true
您可以检查线程YAML - Support conditions for templates以获得更多详细信息。
希望这会有所帮助。