在Azure Pipelines中如何引用前一个阶段中定义的输出变量来定义阶段条件和新变量

47次阅读
没有评论

问题描述

正在编写一个Azure Pipeline,其中使用拉取请求的targetBranchName来定义要使用的测试环境。由于在执行之前,targetBranchName没有值,所以他创建了一个“prepare”阶段,在其中捕获变量的值以在后续阶段使用。

- stage: prepare
  jobs:
  - job: variables
    steps:
    - checkout: none
    - powershell: Write-Output "##vso[task.setvariable variable=TARGET;isOutput=true;isReadOnly=true]$(system.pullRequest.targetBranchName)"

随后,在后续阶段中,他想使用输出变量BRANCH_NAME来确定是否应该运行该阶段,如果是的话,加载适当的组变量。他还想在作业变量中捕获输出变量的值,以便可以使用更“方便”的名称引用它。

阶段的条件似乎在使用prepare作业中手动设置TARGET值进行测试时正常工作,但实际上他看不到TARGET的值,因此他添加了一个“print”步骤,结果显示TARGET没有值。

他对于引用输出变量以复制其值(stage vs. stageDependencies)的方式不确定,或者是在dependencies/stageDependencies中恢复变量值的语法($()$[]${{}})是否有问题。

解决方案

请注意以下操作可能因版本差异或特定情况而有所不同。

为了在Azure Pipelines中引用前一个阶段中定义的输出变量,以定义阶段条件和新变量,你可以遵循以下步骤:

  1. 定义输出变量
    在“prepare”阶段的作业中,使用##vso[task.setvariable]命令定义输出变量,如下所示:

yaml
- stage: prepare
jobs:
- job: variables
steps:
- checkout: none
- powershell: Write-Output "##vso[task.setvariable variable=TARGET;isOutput=true;isReadOnly=true]$(system.pullRequest.targetBranchName)"

  1. 在后续阶段中引用输出变量
    在后续阶段中,你可以使用dependenciesstageDependencies来引用输出变量。以下是你可以采用的两种方式:

  2. 使用dependencies
    “`yaml

    • stage: deploy_to_cint
      dependsOn: prepare
      condition: and(succeeded(‘prepare’), in(dependencies.prepare.outputs[‘variables.TARGET’], ‘env1’, ‘env2’))
      variables:
    • name: TARGET
      value: $[ dependencies.prepare.outputs[‘variables.TARGET’] ]
    • group: ‘EnvironmentCredentials-$(TARGET)’
      jobs:
    • job: debug
      steps:

      • bash: echo This is running for $(TARGET).
        “`
  3. 使用stageDependencies
    “`yaml

    • stage: deploy_to_cint
      stageDependencies:

      • stage: prepare
        variables:
      • name: TARGET
        alias: TARGET_FROM_PREPARE
        condition: and(succeededStage(‘prepare’), in(stageDependencies.prepare.outputs[‘variables.TARGET_FROM_PREPARE’], ‘env1’, ‘env2’))
        variables:
    • group: ‘EnvironmentCredentials-$(TARGET_FROM_PREPARE)’
      jobs:
    • job: debug
      steps:

      • bash: echo This is running for $(TARGET_FROM_PREPARE).
        “`

无论你选择使用dependencies还是stageDependencies,都可以在后续阶段中引用输出变量并进行条件判断,以及加载适当的组变量。在上述示例中,env1env2是你希望的TARGET值,可以根据你的需求进行调整。

通过采用这些步骤,你应该能够成功引用前一个阶段中定义的输出变量,并在后续阶段中使用它来定义阶段条件和新变量。

正文完