我正在尝试重用另一个作业(在同一阶段)中的另一个作业的变量输出,如documentation中所述,但是我无法使其正常工作。 this question中也记录了相同的解决方案。
我正在使用输出变量-
的PowerShell脚本Write-Output "##vso[task.setvariable variable=WEBSITE_CONTENTSHARE;isOutput=true]some-value-dh8e"
然后我像这样在下一个作业中设置变量。请注意,Output_Required_App_Settings
是作业和正在输出变量WEBSITE_CONTENTSHARE
-
- deployment: Deploy_ARM_Template
displayName: Deploy ARM Template
dependsOn:
- Output_Required_App_Settings
variables:
- name: parameters.functionAppSettings.value.WEBSITE_CONTENTSHARE
value: $[dependencies.Output_Required_App_Settings.outputs['Output_Required_App_Settings.WEBSITE_CONTENTSHARE']]
vmImage: ubuntu-latest
但是,parameters.functionAppSettings.value.WEBSITE_CONTENTSHARE
的值在我使用时为空,这意味着我的部署失败。
万一有人怀疑,长名称的原因是因为我在此作业中使用JSON路径替换将WEBSITE_CONTENTSHARE
的值插入到ARM模板参数文件中。
如何在作业之间共享变量?
答案 0 :(得分:0)
我对您的代码进行了测试,并成功输出了变量。
这是我完整的YAML文件:
trigger: none
pool:
vmImage: 'ubuntu-latest'
jobs:
- job: Output_Required_App_Settings
steps:
- task: PowerShell@2
name: Output_Required_App_Settings
inputs:
targetType: 'inline'
script: |
Write-Output "##vso[task.setvariable variable=WEBSITE_CONTENTSHARE;isOutput=true]some-value-dh8e"
- deployment: Deploy_ARM_Template
displayName: Deploy ARM Template
dependsOn:
- Output_Required_App_Settings
variables:
- name: parameters.functionAppSettings.value.WEBSITE_CONTENTSHARE
value: $[dependencies.Output_Required_App_Settings.outputs['Output_Required_App_Settings.WEBSITE_CONTENTSHARE']]
environment: ubuntu-latest
strategy:
runOnce:
deploy:
steps:
- script: echo $(parameters.functionAppSettings.value.WEBSITE_CONTENTSHARE)
这是CmdLine任务的运行结果:
您的输出值为空的奇怪行为可能是由以下因素引起的。
如果使用的是Json格式变量,则需要先将其转换为一行。您可以参考这个问题。 How to pass Json variable to command line task in Azure DevOps pipeline?
作业和任务均支持“名称”和“ displayName”输入,请确保使用“名称:Output_Required_App_Settings”而不是“ diaplayName:Output_Required_App_Settings”