如何在Azure Pipelines中动态引用以前的作业(如果当前阶段有)



我正在尝试建立一个azure yaml管道,该管道为两个相应的作业(测试和部署(使用两个部署模板。作业应该按顺序为每个阶段运行,因为测试作业会创建部署作业所使用的工件。这很好用。

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

我的问题是,是否存在某种动态的";dependent";工作的参考,类似于";取决于在此阶段以前的任何工作,如果有";?

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

Main.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

TemplateTest.yaml

jobs:
- deployment: Test
dependsOn: 
displayName: Test
continueOnError: false
strategy:
runOnce:
deploy:
steps:
#Here the steps for the tests are

当前模板部署.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

由于阶段之间已经存在依赖关系

- 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

我认为你实际上不需要依赖于TemplateDeploy.yml上的作业,但如果你想让它依赖于以前的作业,你可以使用参数来实现


parameters:
- name: makeExplicitDependency
displayName: 'Make excplicit job dependency'
type: boolean
default: true
jobs:
- deployment: Deploy
${{ if eq(parameters.makeExplicitDependency, true) }}:
dependsOn: Test
displayName: Deploy
continueOnError: false
strategy:
runOnce:
deploy:
steps:
#Here the steps for the deployment are

然后:


stages:
- stage: BothTemplates
displayName: 'Run both templates'
jobs:
- template: TemplateTest.yaml
- template: TemplateDeploy.yaml #depends on the job in TemplateTest.yml
- stage: OnlyTest
dependsOn: BothTemplates
displayName: 'Run only test template'
jobs:
- template: TemplateTest.yaml
- stage: OnlyDeploy
dependsOn: OnlyTest
displayName: 'Run only deploy template'
jobs:
- template: TemplateDeploy.yaml
parameters:
makeExplicitDependency: false

因此,删除dependsOn的工作方式与预期的dependsOn: previousJob() #Wait until previous job in stage has finished, if there are any类似

相关内容

最新更新