簡體   English   中英

Azure 管道:將變量傳遞給多個階段

[英]Azure Pipeline: Passing variable to multiple stages

是否可以聲明一個變量然后將其傳遞給下游? 我在 StageA -> StageB -> StageC 下面有一個圖像,我在 StageA 上為我的存儲帳戶獲得了 url,我想將它用於 Stage B 和 StageC

但是如果我使用 [stagedependencies.StageA.JobA.outputs['var'],它只適用於 StageB 而不適用於 StageC

- stage: 'StageC'
  dependsOn: 'StageB'
  pool:
    vmImage: 'windows-latest'
  variables:
    blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
  jobs:
  - job: 'JobC'
    steps:
    - checkout: none
    - download: none
    - powershell: |
        echo JobBUri: $(blobUri)    

在此處輸入圖像描述

也許我在某個地方錯過了它,但這是否意味着您只能從您依賴的直接階段獲得變量?

例子:

trigger:
- master

pool:
  vmImage: ubuntu-latest

stages:
- stage: 'StageA'
  jobs:
  - job: 'JobA'
    steps:
    - task: Powershell@2
      name: 'createOutput'
      inputs:
        targetType: 'inline'
        script: |
          Write-Output "##vso[task.setvariable variable=blobUri;isOutput=true]www.google.com"
- stage: 'StageB'
  dependsOn: 'StageA'
  pool:
    vmImage: 'windows-latest'
  variables:
    blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
  jobs:
  - job: 'JobB'
    steps:
    - powershell: |
        echo JobBUri: $(blobUri)    

- stage: 'StageC'
  dependsOn: 'StageB'
  pool:
    vmImage: 'windows-latest'
  variables:
    blobUri: $[stageDependencies.StageA.JobA.outputs['createOutput.blobUri']]
  jobs:
  - job: 'JobC'
    steps:
    - powershell: |
        echo JobBUri: $(blobUri)    

試試這個,可能在階段 A 中設置的變量將在階段 C 由 stageDependencies.StageA 提供

- stage: 'StageC'
  dependsOn:
  - StageA
  - StageB

其他解決方法是在階段 B 中再次將此變量設置為 output 變量,並通過 stageDependencies.StageB(...) 從 C 訪問它

來自發行說明

https://docs.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-168-update#jobs-can-access-output-variables-from-previous-stages

默認情況下,管道中的每個階段都依賴於 YAML 文件中的前一個階段。 因此,每個階段都可以使用前一階段的 output 變量。 您可以更改依賴關系圖,這也將更改哪些 output 變量可用。 例如,如果階段 3 需要階段 1 的變量,則需要聲明對階段 1 的顯式依賴。

以下說明來自 Kontekst 的答案是正確的(我打算編輯帖子以添加此內容,但不知道這是否合適?):

以下證實並說明這是正確答案:

stages:
- stage: A
  jobs:
  - job: A1
    steps:
     - pwsh: Write-Host "##vso[task.setvariable variable=varFromA;isOutput=true]A"
       name: writevar

- stage: B
  dependsOn: A
  jobs:
  - job: B1
    variables: 
      varA: $[ stageDependencies.A.A1.outputs['writevar.varFromA'] ]
    steps:
     - pwsh: |
          Write-Host "##vso[task.setvariable variable=varFromB;isOutput=true]B"
          Write-Host "accesses $(VarA) from A"
       name: writevar

- stage: C
  dependsOn: 
  - A
  - B
  jobs:
  - job: C1
    variables: 
      varA: $[ stageDependencies.A.A1.outputs['writevar.varFromA'] ]
      varB: $[ stageDependencies.B.B1.outputs['writevar.varFromB'] ]
    steps:
     - pwsh: |
          Write-Host "##vso[task.setvariable variable=varFromC;isOutput=true]C"
          Write-Host "accesses $(varB) from B"
          Write-Host "accesses $(varA) from A"
       name: writevar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM