版本变量在后续管道阶段不可用

问题描述 投票:0回答:1

我已经设置了以下管道(简化):

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 阶段添加到每个部署阶段来解决这个问题,但我很好奇为什么这似乎是必要的。此外,是否有更好/更好的方法来确保每个阶段都可以重用该变量?

azure-devops azure-pipelines azure-pipelines-yaml
1个回答
0
投票

阶段依赖仅用于控制阶段运行的顺序,不支持输出变量的继承。

根据设置一个输出变量以供以后阶段使用

请注意,映射语法使用运行时表达式

$[]
,并且 使用阶段名称 (A) 和作业名称 (A1)
 来跟踪从 
stageDependencies
到输出变量的路径,以完全限定变量。

显式指定创建输出变量的阶段和作业是设计使然。管道依赖路径

$[stageDependencies.{stage}.{job}.outputs['{taskname}.{VarName}']]
将变量映射到每个阶段。

© www.soinside.com 2019 - 2024. All rights reserved.