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

變量概述

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

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

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

新增變量

能夠在生成流水線和發佈流水線中分別定義變量。以下圖,咱們在生產流水線定義變量:ui

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

2)選擇編輯按鈕命令行

3)選擇變量按鈕3d

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

咱們通常使用點(.)或者下劃線(_)隔開變量中的單詞,以便提升變量的可讀性,例如user.name,login.name。日誌

5)在變量的值中填寫默認值。也能夠參考後面的內容,在流水線執行過程當中爲變量賦值。code

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--

相關文章
相關標籤/搜索