Azure DevOps - 在Job之間傳遞變數值

圖片

學員來信問到了,如何在 Azure DevOps Pipeline 的多個 Job 之間,傳遞變數值。這有一些知識背景。

首先,Azure DevOps 的一條 Pipeline 中可以有多個Job,每個Job可以獨立運行,或是相依運行(例如Job A完成後再運行 Job B),每一個Job裡面才是多個Tasks(或是Steps),類似底下這樣:

圖片

假設,上面兩個 Job 之間有相依性,如何在第一個 Job 完成之後,把特定的資訊,傳遞到第二個 Job 之中呢?

一般來說我們會想到 Pipeline Variable。底下這樣的輸出,可以建立出一個 Pipeline Variable,基本的設計是在 tasks 之間傳遞資訊:

- powershell: |
    Write-Host "##vso[task.setvariable variable=myVar;]foo"

- bash: |
    echo "##vso[task.setvariable variable=myVar;]foo"

上面這樣的指令可以定義一個名稱為 myVar 的變數,然後設定其值為 foo。

要使用其值,就可以採用 $(變數名稱) 這樣的指令:

- powershell: |
    Write-Host "變數值: $(myVar)"

- bash: |
    echo "變數值: $(myVar)"

問題是,上述的變數預設狀況下只能在單一的job之間使用,如果要pass到另一個job,得做些設定。首先,變數設定得多加一個 isOutput=true,表明要在下一個job中使用:
圖片

接著,要在第二個Job中,設定一個環境變數(例如下圖的B1StagePara),來承接第一個output變數myPara1:
圖片

這樣在第二個job中才可以使用。ok, 確實有點迂迴。

不過如此一般,你就可以順利的把第一個job產出的資訊,pass給第二個job了:

圖片

整段 Yaml 檔案如下:

trigger:
- main
pool:
  vmImage: ubuntu-latest
stages:
- stage: A
  jobs:
  - job: A1
    steps:
     - bash: echo "##vso[task.setvariable variable=myPara1;isOutput=true]這是JobA1中的Step傳遞過來給JobB1的參數"
       name: A1Step1
- stage: B
  dependsOn: A
  jobs:
  - job: B1
    variables:
      B1StagePara: $[stageDependencies.A.A1.outputs['A1Step1.myPara1']]
    steps:
      - bash: echo B1StagePara ==> $(B1StagePara)

hope it helps. 😁


敏捷開發與Azure DevOps實戰』課程,我們最近要開課囉,如果你需要預先保留席次,請點選這裡登記唷。

若您要詢問問題,或是需要即時取得更多相關訊息,可按這裡加入FB專頁。
若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

留言

這個網誌中的熱門文章

使用Qdrant向量資料庫實作語意相似度比對

專業的價值...

VS Code Terminal 的編碼問題

讓 LINE Bot 對談機器人顯示 "Loading..." 動畫

在Windows Phone (WP8) 中使用SignalR