Yaml azure DevOps管道中的依赖项和条件排序器

Yaml azure DevOps管道中的依赖项和条件排序器,yaml,azure-pipelines,Yaml,Azure Pipelines,在Azure管道yaml文件中,当在单个阶段中定义多个作业时,可以指定它们之间的依赖关系。还可以指定每个作业运行的条件 代码#1 代码#2 问题: 上面的代码#1和#2具有不同的依赖关系和条件顺序。顺序重要吗?如果是的话,怎么了?(不同订单之间有什么区别)分别讨论1和2 代码#1: 由于job1和job2之间没有数据连接,因此这里的数据连接指的是变量共享等 因此,对于#1来说,没有什么事情是有序的。在这里,您可以忽略指定的dependsOn,而对作业A和作业B之间的执行顺序没有特殊要求 但是,您

在Azure管道yaml文件中,当在单个阶段中定义多个作业时,可以指定它们之间的依赖关系。还可以指定每个作业运行的条件

代码#1

代码#2

问题:

上面的代码#1和#2具有不同的依赖关系和条件顺序。顺序重要吗?如果是的话,怎么了?(不同订单之间有什么区别)

分别讨论1和2

代码#1

由于
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