在Azure DevOps Server (TFS 2019) 流水線傳遞參數


變量概述

在Azure DevOps Server的流水線中,變量是銜接不同任務和不通代理之間的橋梁,它可以使相對松散、各自獨立的任務之間相關影響並共享數據。在流水線中使用變量,可以在各任務之間相互調用關鍵性的數據。顧名思義,變量是一個可以在流水線中變化值。在CI/CD的執行流水線中,我們都需要使用到各種用途的字符、數字,對象這些字符、數據的定義,我們可以采用變量的方式實現,而不需要在代碼中硬編碼。系統在運行流水線的過程中,將這些定義的變量自動替換為我需要的值。例如在線部署過程中,我們將用戶名和密碼等信息存儲在變量中,這樣不僅讓配置過程更加直觀,還提高的流水線的重用性。

在DevOps Server 的變量中,有一部分變量是系統自動設置的,我們不能自由修改,例如生成名稱、生成編號等。這些系統預先定義的變量,一般在命名格式上有固定的前綴, 例如system、build、Agent等。例如Build.DifinitionName,標識生成流水線的名稱。

在這篇文章中,我們主要介紹如何管理和使用用戶自定義的變量,以及在不同的代理、不同的流水線中,我們如何使用這些變量。

新增變量

可以在生成流水線和發布流水線中分別定義變量。如下圖,我們在生產流水線定義變量:

1)在生成流水線清單中選擇需要編輯流水線

2)選擇編輯按鈕

3)選擇變量按鈕

4)點擊添加按鈕,新增變量。

我們一般使用點(.)或者下划線(_)隔開變量中的單詞,以便提高變量的可讀性,例如user.name,login.name。

5)在變量的值中填寫默認值。也可以參考后面的內容,在流水線執行過程中為變量賦值。

image

在流水線中讀取變量、為變量賦值

我們可以在各種流水線任務中讀取變量值,也可以流水線中為變量賦值。Azure DevOps Server提供了多種機制,可以讓用戶在流水線中讀取變量值:

1)在流水線讀取參數。

可以將變量值作為參數的方式傳輸到任務腳本中,例如在命令行、python、PowerShell等中使用變量

下圖是在Python腳本中讀取自定義的變量

image

當任務執行的時候,可以在日志中看到輸出的變量值

image

2)在流水線中設置變量值

如果在流水線中,需要按照需求更改變量值,可以使用Azure DevOps Server 提供的接口來修改變量值。例如PowerShell的腳本如下

Write-Host "##vso[task.setvariable variable=login.name]zhanghongjun"
Write-Host "##vso[task.setvariable variable=login.password;issecret=true]mypassword"

使用shell腳本如下:

#!/bin/bash
echo "##vso[task.setvariable variable=login.name]zhanghongjun"
echo "##vso[task.setvariable variable=login.password;issecret=true]mypassword"

變量組:在流水線之間共享變量值

如果需要在流水線中共享變量,可以使用變量組。使用變量組存儲要在多個管道中控制和可用的值。變量組在Pipelines Hub的“庫”選項卡中定義和管理。創建變量組的操作如下:

image

在流水線之間傳遞變量值

有不少用戶提出了這個問題,是否可以在不同的流水線之間傳遞變量值,答案是不能,至少目前版本DevOps Server 2019不能。

在下面的這樣一個場景中,有這樣的需求:我們使用Maven編譯和打包項目代碼,在部署過程使用容器Docker作為部署環境;需要創建Docker鏡像時,使用Maven的POM文件中的版本號作為容器的名稱,這樣用戶就非常方便的能夠查詢到鏡像中部署的軟件版本。為了解決這樣的問題,目前我們使用的解決方案是在編譯過程中使用腳本獲取POM文件中的版本號,然后將其用來命名Maven的數據文件名稱,例如company-cms-1.0.1.jar;然后在制作鏡像的過程中,分析這個名稱,使用其中的版本號作為鏡像名稱。

微軟DevOps MVP 張洪君 http://www.cnblogs.com/danzhang

--End--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM