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