yaml - 天蓝色 DevOps 管道中的依赖关系和条件 oder
问题描述
在 Azure 管道 yaml 文件中,当在单个阶段定义多个作业时,可以指定它们之间的依赖关系。还可以指定每个作业运行的条件。
代码 #1
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
代码 #2
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
问题:
上面的代码 #1 和 #2 具有不同的依赖和条件顺序。顺序重要吗?如果有,有什么关系?(不同订单有什么区别)
解决方案
分别讨论 1 和 2。
代码#1:
job1
由于和之间没有数据连接job2
,这里的数据连接是指变量共享等。
所以,对于#1,顺序没有问题。这里可以忽略指定的,而对和dependsOn
之间的执行顺序没有特殊要求。job A
job B
但是,您需要注意的一件事是,当您不指定dependsOn
. 例如,大多数时候,他们会尊重订单job A
, job B
。有时,它们会随机运行为job B
, job A
。
代码#2:
这必须做出dependsOn
指定。因为您job B
使用的是在创建/生成的输出变量job A
。由于我们的系统允许相同的变量名存在于不同的作业中,因此您必须指定dependsOn
以便系统可以知道应该从其他人那里job B
找到变量。只有指定了这个关键字,生成的变量才能被暴露并用于下一个作业。skipsubsequent
job A
job A
因此,简而言之,一旦作业之间存在任何数据连接,例如变量传递,您必须指定dependsOn
使作业相互连接。
推荐阅读
- javascript - 如何使我的所有路由都具有 https 并强制 http 到 https?
- phaser-framework - 将 Phaser 3 游戏嵌入现有的秘银网站
- javascript - 检查数组中的空元素
- bots - 无法读取未定义 Discord.js 的属性“角色”
- javascript - 带有单个 sql 查询的 PHP 分页
- python - 自定义函数的偏导数
- amazon-web-services - 使用的命令为创建 S3 存储桶时出现 InvalidLocationConstraint 错误
- mysql - 从此表中获取特定结果
- google-apps-script - 谷歌脚本修订历史太短 - 有没有办法进一步检索
- javascript - React-Native — 如何使用 react-navigation 传递参数?