Azure devops 如何动态引用Azure管道中以前的作业(如果当前阶段中存在任何作业)

Azure devops 如何动态引用Azure管道中以前的作业(如果当前阶段中存在任何作业),azure-devops,azure-pipelines,azure-pipelines-yaml,Azure Devops,Azure Pipelines,Azure Pipelines Yaml,我正在尝试设置一个azure yaml管道,该管道使用两个部署模板分别用于两个作业(测试和部署)。每个阶段的作业都应该按顺序运行,因为测试作业创建了部署作业使用的工件。这很有效 但是,对于一个环境,我将部署分为两个阶段,一个阶段仅运行测试,另一个阶段运行实际部署。我遇到的问题是,我的部署作业有一个引用测试作业的“dependson”。因此,当我为我的环境添加这两个阶段时,我的管道是无效的 我的问题是,对于一份工作,是否存在某种动态的“dependson”参考,比如“取决于这个阶段以前的任何工作,

我正在尝试设置一个azure yaml管道,该管道使用两个部署模板分别用于两个作业(测试和部署)。每个阶段的作业都应该按顺序运行,因为测试作业创建了部署作业使用的工件。这很有效

但是,对于一个环境,我将部署分为两个阶段,一个阶段仅运行测试,另一个阶段运行实际部署。我遇到的问题是,我的部署作业有一个引用测试作业的“dependson”。因此,当我为我的环境添加这两个阶段时,我的管道是无效的

我的问题是,对于一份工作,是否存在某种动态的“dependson”参考,比如“取决于这个阶段以前的任何工作,如果有的话”

以下yaml文件中的代码片段供参考:

梅因·亚马尔

#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是的,这是可能的。这里的想法是完全避免设置它,因为这样我们就隐含了对以前工作的依赖。你能考虑一下我的回答是否对你有帮助?好的,谢谢你。我已经对你的回复投了赞成票,但是由于我是这个网站的新用户,我的赞成票似乎不计入显示的总数。