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專頁。
若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。
留言