Azure DevOps变量输出到另一个作业,导致空值

时间:2020-08-04 17:27:33

标签: variables azure-devops

我正在尝试重用另一个作业(在同一阶段)中的另一个作业的变量输出,如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模板参数文件中。

如何在作业之间共享变量?

1 个答案:

答案 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任务的运行结果:

enter image description here

您的输出值为空的奇怪行为可能是由以下因素引起的。

  1. 如果使用的是Json格式变量,则需要先将其转换为一行。您可以参考这个问题。 How to pass Json variable to command line task in Azure DevOps pipeline?

  2. 作业和任务均支持“名称”和“ displayName”输入,请确保使用“名称:Output_Required_App_Settings”而不是“ diaplayName:Output_Required_App_Settings”