Azure Pipeline部署作业无法获取普通作业输出变量问题排查
Azure DevOps部署作业获取依赖作业输出变量为空的解决方法
问题原因是部署作业(deployment job)的顶层变量解析时机和普通作业不同:普通作业的顶层变量可以直接解析依赖作业的输出,但部署作业在初始化顶层变量时,无法正确读取依赖作业的输出值,导致变量为空。
解决方案1:直接在参数中引用输出表达式
跳过中间变量定义,直接在模板参数里使用依赖输出的表达式:
jobs: - job: dependency steps: - template: my_template.yml - deployment: my_deployment environment: MyEnvironment dependsOn: - dependency strategy: runOnce: deploy: steps: - checkout: self - template: another_template.yml parameters: TF_VAR_storage_account_name: $[ dependencies.dependency.outputs['TaskName.storage_account_name'] ]
解决方案2:在部署步骤中先赋值变量
在部署作业的执行步骤里,通过##vso[task.setvariable]命令将依赖输出赋值给本地变量,再传递给模板:
jobs: - job: dependency steps: - template: my_template.yml - deployment: my_deployment environment: MyEnvironment dependsOn: - dependency strategy: runOnce: deploy: steps: - checkout: self # 先获取依赖作业的输出并赋值给本地变量 - script: | echo "##vso[task.setvariable variable=storage_account_name;]$[ dependencies.dependency.outputs['TaskName.storage_account_name'] ]" - template: another_template.yml parameters: TF_VAR_storage_account_name: $(storage_account_name)
验证步骤(可选)
可以在依赖作业末尾添加步骤,确认输出变量是否正确生成:
- job: dependency steps: - template: my_template.yml # 验证输出变量是否存在 - script: echo "依赖作业输出的storage_account_name: $(TaskName.storage_account_name)"
内容的提问来源于stack exchange,提问作者ccoutinho
相关产品推荐
相关产品推荐

