我已经设置了以下管道(简化):
azure-pipelines.yml
stages:
- stage: semanticVersioning
...
- stage: build
...
- stage: deployToTest
dependsOn:
- semanticVersioning
- build
...
- stage: deployToAcc
dependsOn:
# - required: semanticVersioning + build
- deployToTest
...
- stage: deployToProd
dependsOn:
# - required: semanticVersioning + build
- deployToAcc
...
每个部署阶段都使用一个
build.yml
模板,该模板使用在语义版本控制阶段定义为输出的 $(template)
var:
build.yml
- stage: build
dependsOn: semanticVersioning
variables:
version: $[ stageDependencies.semanticVersioning.semVer.outputs['Version.GitVersion.SemVer'] ]
...
deployToTest
阶段成功,因为它取决于语义版本控制和构建阶段。我本以为,由于 deployToAcc
取决于 deployToTest
,它也自动取决于 sematicVersioning
和 build
阶段。但是,当从 $(version)
阶段调用 build.yml
时,构建会失败,deployToAcceptance
为空。
我可以通过将构建和 semver 阶段添加到每个部署阶段来解决这个问题,但我很好奇为什么这似乎是必要的。此外,是否有更好/更好的方法来确保每个阶段都可以重用该变量?
阶段依赖仅用于控制阶段运行的顺序,不支持输出变量的继承。
请注意,映射语法使用运行时表达式
,并且 使用阶段名称 (A) 和作业名称 (A1)$[]
来跟踪从stageDependencies
到输出变量的路径,以完全限定变量。
显式指定创建输出变量的阶段和作业是设计使然。管道依赖路径
$[stageDependencies.{stage}.{job}.outputs['{taskname}.{VarName}']]
将变量映射到每个阶段。