Azure devops 如何动态引用Azure管道中以前的作业(如果当前阶段中存在任何作业)
我正在尝试设置一个azure yaml管道,该管道使用两个部署模板分别用于两个作业(测试和部署)。每个阶段的作业都应该按顺序运行,因为测试作业创建了部署作业使用的工件。这很有效 但是,对于一个环境,我将部署分为两个阶段,一个阶段仅运行测试,另一个阶段运行实际部署。我遇到的问题是,我的部署作业有一个引用测试作业的“dependson”。因此,当我为我的环境添加这两个阶段时,我的管道是无效的 我的问题是,对于一份工作,是否存在某种动态的“dependson”参考,比如“取决于这个阶段以前的任何工作,如果有的话” 以下yaml文件中的代码片段供参考: 梅因·亚马尔Azure devops 如何动态引用Azure管道中以前的作业(如果当前阶段中存在任何作业),azure-devops,azure-pipelines,azure-pipelines-yaml,Azure Devops,Azure Pipelines,Azure Pipelines Yaml,我正在尝试设置一个azure yaml管道,该管道使用两个部署模板分别用于两个作业(测试和部署)。每个阶段的作业都应该按顺序运行,因为测试作业创建了部署作业使用的工件。这很有效 但是,对于一个环境,我将部署分为两个阶段,一个阶段仅运行测试,另一个阶段运行实际部署。我遇到的问题是,我的部署作业有一个引用测试作业的“dependson”。因此,当我为我的环境添加这两个阶段时,我的管道是无效的 我的问题是,对于一份工作,是否存在某种动态的“dependson”参考,比如“取决于这个阶段以前的任何工作,
#This first stage would work as it uses both templates in succession
stages:
- stage: BothTemplates
displayName: 'Run both templates'
jobs:
- template: TemplateTest.yml
- template: TemplateDeploy.yml #depends on the job in TemplateTest.yml
# The pipeline is invalid because of OnlyDeploy, as the TemplateDeploy.yml depends in the job "Test", which does not exist in the OnlyDeploy-context
- stage: OnlyTest
dependsOn: BothTemplates
displayName: 'Run only test template'
jobs:
- template: TemplateTest.yml
- stage: OnlyDeploy
dependsOn: OnlyTest
displayName: 'Run only deploy template'
jobs:
- template: TemplateDeploy.yml
模板测试
jobs:
- deployment: Test
dependsOn:
displayName: Test
continueOnError: false
strategy:
runOnce:
deploy:
steps:
#Here the steps for the tests are
当前TemplateDeploy.yaml
jobs:
- deployment: Deploy
dependsOn: Test
displayName: Deploy
continueOnError: false
strategy:
runOnce:
deploy:
steps:
#Here the steps for the deployment are
我的想法是将TemplateDeploy.yaml更改为如下内容:
jobs:
- deployment: Deploy
dependsOn: previousJob() #Wait until previous job in stage has finished, if there are any
displayName: Deploy
continueOnError: false
strategy:
runOnce:
deploy:
steps:
#Here the steps for the deployment are
因为阶段之间已经存在依赖关系
-阶段:OnlyTest
dependsOn:BothTemplates
displayName:“仅运行测试模板”
工作:
-模板:TemplateTest.yml
-阶段:仅部署
dependsOn:OnlyTest
displayName:“仅运行部署模板”
工作:
-模板:TemplateDeploy.yml
我认为您实际上不需要在这里依赖于TemplateDeploy.yml上的作业,但是如果您想使其依赖于以前的作业,可以使用参数来实现
参数:
-名称:makeExplicitDependency
displayName:“使免除作业依赖”
类型:布尔型
默认值:true
工作:
-部署:部署
${{if eq(parameters.makeExplicitDependency,true)}:
德彭森:测试
显示名称:部署
错误:false
战略:
跳动:
部署:
步骤:
#下面是部署的步骤
然后:
阶段:
-阶段:两个模板
displayName:'运行两个模板'
工作:
-模板:TemplateTest.yaml
-模板:TemplateDeploy.yaml#取决于TemplateTest.yml中的作业
-阶段:OnlyTest
dependsOn:BothTemplates
displayName:“仅运行测试模板”
工作:
-模板:TemplateTest.yaml
-阶段:仅部署
dependsOn:OnlyTest
displayName:“仅运行部署模板”
工作:
-模板:TemplateDeploy.yaml
参数:
makeExplicitDependency:false
因此,删除
dependsOn
就像您期望的dependsOn:previousJob()#等到阶段中的前一个作业完成,如果有任何
这是一个好主意,我没有考虑将dependsOn置于某个条件下。可以直接在dependsOn部分中放置一个变量吗?此外,我需要对管道的某些部分按顺序进行作业,对其他部分按不同阶段进行作业,因此issue@Bast是的,这是可能的。这里的想法是完全避免设置它,因为这样我们就隐含了对以前工作的依赖。你能考虑一下我的回答是否对你有帮助?好的,谢谢你。我已经对你的回复投了赞成票,但是由于我是这个网站的新用户,我的赞成票似乎不计入显示的总数。