首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何引用使用矩阵策略的azure管道作业的输出变量?

如何引用使用矩阵策略的azure管道作业的输出变量?
EN

Stack Overflow用户
提问于 2022-11-21 13:15:23
回答 1查看 48关注 0票数 1

我有下面的蓝色管道yml (在底部,有些部分省略了)。我总共有3份工作。第一个用矩阵策略运行,第二个正常运行,第三个尝试提取前两个作业设置的输出变量。

第二个作业的输出变量引用似乎运行良好。但是当引用输出变量rom第一个作业时,我不知道use.The作业的哪个作业名叫做'Build‘,但是这个名称似乎受到策略矩阵中的名称的影响。当我跑步时:

代码语言:javascript
复制
echo $(Agent.JobName)
echo $(System.JobName)
echo $(System.JobDisplayName)

对于一个名为“Build”的工作,其中包含一个名为“linux”的矩阵条目,那么我得到:

代码语言:javascript
复制
Build linux
linux
Build linux

但使用以下任何一种方法似乎都不起作用:

代码语言:javascript
复制
$[ dependencies.Build.outputs['SetJobStatus.x64linuxStatus'] ]
$[ dependencies.linux.outputs['SetJobStatus.x64linuxStatus'] ]
$[ dependencies.Build_linux.outputs['SetJobStatus.x64linuxStatus'] ]
$[ dependencies['Build linux'].outputs['SetJobStatus.x64linuxStatus'] ]

这是怎么回事?第二份工作的引用给了我希望,但我显然在工作名称上弄错了。我已经尝试了这么多的组合,现在我已经完全忘记了我有什么和没有尝试。

当报告结果时,我会看到create_universal_macos_binary作业状态的值,而不是来自第一个作业的其他作业的值。

代码语言:javascript
复制
stages:
- stage: Build
  jobs:
  - job: Build
    timeoutInMinutes: 90
    strategy:
      matrix:
          linux:
            tripletCompressed: 'x64linux'
          win64:
            tripletCompressed: 'x64windows'
          macOS_x64:
            tripletCompressed: 'x64osx'
          macOS_arm64:
            tripletCompressed: 'arm64osx'
    pool:
      vmImage: $(imageName)
    steps:

    ...

    # Set output variable with job status
    - bash: |
        echo $(Agent.JobName)
        echo $(System.JobName)
        echo $(System.JobDisplayName)
        echo "vso[task.setvariable variable=$(tripletCompressed)Status;isOutput=true]${AGENT_JOBSTATUS}"
        echo "##vso[task.setvariable variable=$(tripletCompressed)Status;isOutput=true]${AGENT_JOBSTATUS}"
      name: SetJobStatus
      displayName: Set Job Status Variable

  - job: create_universal_macos_binary
    displayName: 'Create universal MacOS binary'
    dependsOn: 'Build'
    condition: and(and(eq(${{ parameters.BUILD_MACOS_X64 }}, true), eq(${{ parameters.BUILD_MACOS_ARM64 }}, true)), ${{ containsValue(parameters.TARGET_PACKAGES, 'core') }})
    pool:
      vmImage: macOS-11

    ...

    # Set output variable with job status
    - bash: |
        echo $(Agent.JobName)
        echo $(System.JobName)
        echo $(System.JobDisplayName)
        echo "vso[task.setvariable variable=universalStatus;isOutput=true]${AGENT_JOBSTATUS}"
        echo "##vso[task.setvariable variable=universalStatus;isOutput=true]${AGENT_JOBSTATUS}"
      name: SetJobStatus
      displayName: Set Job Status Variable

  - job: message_teams
    displayName: 'Report Status to Teams'
    dependsOn:
      - 'Build'
      - create_universal_macos_binary
    pool:
      vmImage: ubuntu-20.04

    variables:
      windowsStatus: $[ dependencies.win64.outputs['SetJobStatus.x64windowsStatus'] ]
      linuxStatus: $[ dependencies['Build linux'].outputs['SetJobStatus.x64linuxStatus'] ]
      macosIntelStatus: $[ dependencies.macOS_x64.outputs['SetJobStatus.x64osxStatus'] ]
      macosArmStatus: $[ dependencies.macOS_arm64.outputs['SetJobStatus.arm64osxStatus'] ]
      universalStatus: $[ dependencies.create_universal_macos_binary.outputs['SetJobStatus.universalStatus'] ]

    steps:

    ...

    - task: PythonScript@0
      inputs:
        scriptSource: 'filePath'
        scriptPath: ./process-status.py
      env:
        CI_BUILD_ID: $(Build.BuildId)
        WINDOWS_STATUS: $(windowsStatus)
        LINUX_STATUS: $(linuxStatus)
        MACOS_INTEL_STATUS: $(macosIntelStatus)
        MACOS_ARM_STATUS: $(macosArmStatus)
        UNIVERSAL_STATUS: $(universalStatus)
      condition: and(succeededOrFailed(), ${{ parameters.REPORT_TO_TEAMS }})
      displayName: "Report result to Teams"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-22 06:26:03

您可以看到文档的详细信息。

要在同一阶段的下一个作业中获得输出变量,可以使用格式:$[ dependencies.Build.outputs'linux.SetJobStatus.x64linuxStatus‘]

在您的问题中,如果您将作业3 message_team中的变量设置为下面的变量,则应该使用它们。

代码语言:javascript
复制
variables:
  windowsStatus: $[ dependencies.Build.outputs['win64.SetJobStatus.x64windowsStatus'] ]
  linuxStatus: $[ dependencies.Build.outputs['linux.SetJobStatus.x64linuxStatus'] ]
  macosIntelStatus: $[ dependencies.Build.outputs['macOS_x64.SetJobStatus.x64osxStatus'] ]
  macosArmStatus: $[ dependencies.Build.outputs['macOS_arm64.SetJobStatus.arm64osxStatus'] ]
  universalStatus: $[ dependencies.Build.outputs['SetJobStatus.universalStatus'] ]

如果您在这里回显变量如下:

代码语言:javascript
复制
steps:
- bash: |
    echo $(windowsStatus)
    echo $(linuxStatus)
    echo $(macosIntelStatus)
    echo $(macosArmStatus)
    echo $(universalStatus)

您将能够得到这样的输出:

我希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74519533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档