Yaml azure DevOps管道中的依赖项和条件排序器
在Azure管道yaml文件中,当在单个阶段中定义多个作业时,可以指定它们之间的依赖关系。还可以指定每个作业运行的条件 代码#1 代码#2 问题: 上面的代码#1和#2具有不同的依赖关系和条件顺序。顺序重要吗?如果是的话,怎么了?(不同订单之间有什么区别)分别讨论1和2 代码#1: 由于Yaml azure DevOps管道中的依赖项和条件排序器,yaml,azure-pipelines,Yaml,Azure Pipelines,在Azure管道yaml文件中,当在单个阶段中定义多个作业时,可以指定它们之间的依赖关系。还可以指定每个作业运行的条件 代码#1 代码#2 问题: 上面的代码#1和#2具有不同的依赖关系和条件顺序。顺序重要吗?如果是的话,怎么了?(不同订单之间有什么区别)分别讨论1和2 代码#1: 由于job1和job2之间没有数据连接,因此这里的数据连接指的是变量共享等 因此,对于#1来说,没有什么事情是有序的。在这里,您可以忽略指定的dependsOn,而对作业A和作业B之间的执行顺序没有特殊要求 但是,您
job1
和job2
之间没有数据连接,因此这里的数据连接指的是变量共享等
因此,对于#1来说,没有什么事情是有序的。在这里,您可以忽略指定的dependsOn
,而对作业A
和作业B
之间的执行顺序没有特殊要求
但是,您需要注意的一个关键问题是,如果不指定dependsOn
,实际运行顺序将随机更改。例如,在大多数情况下,他们会尊重订单作业A
,作业B
。偶尔,它们会随机运行为作业B
,作业A
代码#2:
这必须指定dependsOn
。因为您的作业B
正在使用在作业A
创建/生成的输出变量。由于我们的系统允许不同作业中存在相同的变量名称,因此必须指定dependsOn
,以便系统可以知道job
应该从job A
找到变量skipusubsequent
。只有指定了此关键字,才能将作业A
中生成的变量公开并可用于下一个作业
因此,简单地说,一旦作业之间存在任何数据连接,例如变量传递,您必须指定
dependsOn
,以使作业彼此连接。我认为顺序无关紧要。dependsOn确定作业何时开始。该条件决定作业是否运行。问题的背景是什么?你遇到什么问题了吗?
jobs:
- job: A
steps:
- script: echo hello
- job: B
dependsOn: A
condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/master'))
steps:
- script: echo this only runs for master
jobs:
- job: A
steps:
- script: "echo ##vso[task.setvariable variable=skipsubsequent;isOutput=true]false"
name: printvar
- job: B
condition: and(succeeded(), ne(dependencies.A.outputs['printvar.skipsubsequent'], 'true'))
dependsOn: A
steps:
- script: echo hello from B