Azure DevOps YAML流水线动态设置部署环境变量失效求助
问题描述
尝试编写Azure DevOps YAML流水线,计划在前序作业中动态设置部署环境,但变量未正常生效。执行后echo Hello, $(environmentName)!仅输出Hello, !。
概念示例代码:
pool: vmImage: 'ubuntu-latest' stages: - stage: SetVariable jobs: - job: SetVariableJob steps: - script: | echo "##vso[task.setvariable variable=environmentName;isOutput=true]TestEnvironmentName" name: setvarStep - stage: Deploy dependsOn: SetVariable variables: environmentName: $[ dependencies.SetVariable.outputs['SetVariableJob.setvarStep.environmentName'] ] jobs: - deployment: DeployWeb environment: $(environmentName) strategy: runOnce: deploy: steps: - script: echo Hello, $(environmentName)!
问题原因及解决方法
问题核心有两点:跨阶段变量引用语法错误,以及部署作业的environment字段不支持运行时变量引用,需使用编译时模板表达式。
修正跨阶段变量引用语法
跨阶段引用输出变量必须使用stageDependencies而非dependencies,正确写法为:$[ stageDependencies.SetVariable.SetVariableJob.outputs['setvarStep.environmentName'] ]调整部署作业的环境字段赋值方式
部署作业的environment属于编译时属性,无法直接用$(environmentName)这种运行时变量引用,需直接使用模板表达式引用输出变量,或通过阶段变量中转后用模板表达式调用。完整修正后的流水线代码
方案一:直接在environment字段引用输出变量pool: vmImage: 'ubuntu-latest' stages: - stage: SetVariable jobs: - job: SetVariableJob steps: - script: | echo "##vso[task.setvariable variable=environmentName;isOutput=true]TestEnvironmentName" name: setvarStep - stage: Deploy dependsOn: SetVariable jobs: - deployment: DeployWeb environment: $[ stageDependencies.SetVariable.SetVariableJob.outputs['setvarStep.environmentName'] ] strategy: runOnce: deploy: steps: - script: echo Hello, $[ stageDependencies.SetVariable.SetVariableJob.outputs['setvarStep.environmentName'] ]!方案二:通过阶段变量中转,方便步骤中重复使用
pool: vmImage: 'ubuntu-latest' stages: - stage: SetVariable jobs: - job: SetVariableJob steps: - script: | echo "##vso[task.setvariable variable=environmentName;isOutput=true]TestEnvironmentName" name: setvarStep - stage: Deploy dependsOn: SetVariable variables: environmentName: $[ stageDependencies.SetVariable.SetVariableJob.outputs['setvarStep.environmentName'] ] jobs: - deployment: DeployWeb environment: $[ variables.environmentName ] strategy: runOnce: deploy: steps: - script: echo Hello, $(environmentName)!
内容的提问来源于stack exchange,提问作者codechurn
相关产品推荐
相关产品推荐

