Azure DevOps 管道,如何在阶段 2 内的作业模板文件路径中使用阶段 1 的输出变量

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

在第一阶段,第 1 阶段,我将使用输出变量语法提取一些变量,以便其可用于下一阶段。

我有不同的舞台和工作文件。

在下一阶段,我将使用阶段依赖语法定义这些提取变量。

- stage: STAGE2
  pool:
   name: $(agent_pool)  
  variables:
    RELEASE_TYPE: $[ stageDependencies.stage1.job1.output['step1.RELEASE_TYPE']]
  displayName: stage2
  jobs:
  - template: /job/main.yaml
    parameters:
     release: $(RELEASE_TYPE)

在下面的 job2 文件(/job/main.yaml)中,我想在模板文件路径中访问此变量。

parameters:
- name: release
  type: string
jobs:
- deployment: Release
  displayName: Job2
  pool: $(agent_pool)
  strategy:
    runOnce:
     deploy:
      steps: 
      - template:/step/${{ parameters.release }}/login.yaml

请忽略缩进错误。

问题是当我尝试运行管道时,它给出错误,基本上 ${{parameters.release}} 没有扩展。

我知道 {{ }} 是编译时语法,但是有没有办法将上一阶段的运行时变量使用到下一阶段作业内的模板文件路径中?

提前感谢您的帮助。

azure-devops azure-pipelines pipeline cicd
1个回答
0
投票

这应该是可行的。我有三个建议可能有助于解决您的问题:

1. 变量赋值中的语法错误(

s
中缺少变量
outputs

# Correction for output -> outputs
RELEASE_TYPE: $[ stageDependencies.stage1.job1.outputs['step1.RELEASE_TYPE']]

2.输出变量配置

您没有显示如何分配此变量,但为了使其能够用作前一阶段的输出,您在分配变量时需要

isOutput=true

# Powershell example
- pwsh: |
    Write-Output "##vso[task.setvariable variable=RELEASE_TYPE;isOutput=true]MyReleaseType"
  name: step1

3. 较大管道的显式依赖关系

我不知道完整的管道是什么样子的,但是如果它随着额外的阶段而变得更大,我建议你添加一个显式的

dependsOn: stage1
而不是依赖于隐式的dependsOn(编译时解析的阶段顺序)

示例代码显示它应该可以工作

- stage: stage1
  displayName: stage1 Temp

  jobs: 

  - job: job1

    steps:

    - pwsh: |
        Write-Output "##vso[task.setvariable variable=RELEASE_TYPE;isOutput=true]MyReleaseType"
      name: step1

- stage: stage2
  displayName: stage2 Temp
  variables:
    RELEASE_TYPE: $[ stageDependencies.stage1.job1.outputs['step1.RELEASE_TYPE']]

  jobs: 

  - job: show_variable

    steps:

    - pwsh: |
        Write-Output "$(RELEASE_TYPE)"

  - template: main.yaml
    parameters:
      release: $(RELEASE_TYPE)
# main.yaml
parameters:
- name: release
  type: string

jobs:
- deployment: Release
  displayName: Job2
  pool:
    vmImage: ubuntu-latest
  environment: 
    name: temp
  strategy:
    runOnce:
     deploy:
  
      steps: 

      - pwsh: Write-Output "${{ parameters.release }}"

example-code

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