在第一阶段,第 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}} 没有扩展。
我知道 {{ }} 是编译时语法,但是有没有办法将上一阶段的运行时变量使用到下一阶段作业内的模板文件路径中?
提前感谢您的帮助。
这应该是可行的。我有三个建议可能有助于解决您的问题:
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 }}"