将变量传递给 Azure DevOps Yaml 管道中的非依赖作业

Passing variable to non-dependent jobs in Azure DevOps Yaml Pipelines

我正在尝试将一个变量从一个作业传递到多个非依赖作业。它适用于依赖工作。但是,它不适用于非依赖性工作。我有这样定义的 yaml 管道。

jobs:
    - job: JobA
      steps: 
      - task: Bash@3
        name: var_test       
        inputs:
          targetType: 'inline'
          script: |           
            myVar=demo-value    
            echo "##vso[task.setvariable variable=myVarNew;isOutput=true]$myVar"              
    - job: JobB          
      dependsOn: JobA          
      variables:
        - name: newVar2
          value: $[ dependencies.JobA.outputs['var_test.myVarNew'] ]
      steps:   
    - task: Bash@3         
        inputs:
          targetType: 'inline'
          script: |            
            echo "$(newVar2)"
    - job: JobC          
      dependsOn: JobB
      variables:
        - name: newVar2
          value: $[ dependencies.JobA.outputs['var_test.myVarNew'] ]
      steps:     
      - task: Bash@3         
        inputs:
          targetType: 'inline'
          script: |
            echo "$(newVar2)"

它在 JobB 中工作正常。但是当我在像 jobC 这样的不同下游工作中尝试它时,它不起作用。此外,我无法在每个作业中设置变量,因为手动验证无代理作业也在两者之间。我想在同一阶段的不同非依赖作业中使用相同的变量。请帮忙。谢谢

dependencies.X.outputs 依赖于已声明为依赖项的 X。如果它不存在,那么 Azure Pipelines 无法真正知道将其作为该作业的一个跟踪(唯一的例外是作业隐式 dependsOn 前面的作业,除非明确设置。

在你的例子中,因为 JobB 依赖于 JobAJobC 依赖于 JobB,下面是等效的(即使有点多余):

- job: JobC
  dependsOn: 
  - JobA
  - JobB
...

对于依赖关系图而言,它是多余的,但它满足了声明依赖关系的需要,以便您可以访问其输出变量。