持續集成高級篇之Jenkins參數化構建(二)
- 2019 年 10 月 3 日
- 筆記
上一節我們講解了如何使用bat腳本或者powershell腳本自身的機制來達到參數化構建的目的,這在一定程式上增加了靈活性,然而缺點也相當明顯:它只能適應一些相對比較固定的參數傳入(比如像上一節講到的,構建的環境分為(development
和production
)兩種情況,對於一些相對較複雜的情況以上方法就會捉襟見肘,最為明顯問題是外部的變化可能導致參數隨之做必要更改,最常見的是文件的位置參數,我們指定歸檔文件的目錄為D
盤下的一個文件夾,現在D盤滿了需要指定為其它盤,則所有的腳本都需要更改,這樣的結果就是可維護性差.我們可以把一些較為常用的參數定義為全局參數,比如常用工具的位置.
本節我們將從項目級別,節點級別,全局級別來講解Jenkins ci提供的參數配置方案
項目級別參數
本節部分我們分為參數構建和在項目中定義項目級別參數來講解.
參數化構建項目.
在Jenkins里新建一個自由式項目,勾選This project is parameterized
會出現一個Add Parameter
按鈕,點擊會出現一個下拉框,選擇最後一項’string paramter’創建一個字元串類型參數,在出現的對話框中輸入名稱(我用的是buildenv
)和默認值(默認值可以不輸入),在構建欄里我們選擇Execute windows bat command
,在出現的框中輸入以下內容:
//buildenv為我們定義的參數名 echo %buildenv%
點擊ok
完成項目創建,此時build now
按鈕變成了Build with Parameters
參數化構建,點擊又會出現一步讓輸入值,有默認值可以直接點擊’build’,點擊後我們查看控制台可以看到輸出了我們定義的參數
在以後的章節里也是一樣,不管是Jenkins預置的參數還是我們自定義的,使用cmd時都是通過
%參數名%
來獲取.
如果是powershell腳本,則需要使用
$env:參數名
來接收參數,比如在powershell命令窗口輸入echo $env:buildenv
就會達到和上面cmd一樣的效果.
需要指出的是,如果在jenkins里直接執行powershell命令,需要下載powershell插件.
項目級別參數
以上參數化構建適用於需要手動構建的,不是特別頻繁但是參數又必須動態指定的情況,這種構建缺點也相當明顯,因為每次需要手動指定參數.還有一種方法是指定項目級別的參數,這種方式比直接使用腳本自身參數要更容易管理,因為參數在單獨的一塊地方定義,並且可以添加描述,使得語義更加明確,並且參數在單獨醒目地方出更容易引起關注.
下面講解一下如何在項目級別添加環境變數.
新建一個自由式項目,名稱隨意,找到Build Environment
欄目,找到Inject environment variables to the build process
選項並勾選,此時會出現一些輸入框讓輸入,Properties File Path
暫時忽略,在下面的Properties Content
里輸入buildenv=development
就可以在bat,shell或者powershell腳本里使用它了.
如果需要定義多個參數,換一行書寫就行了,同樣是name=value形式
大家可能已經看到,選項里除了
Properties Content
外,下面還有Groovy Script
選項,大家不要害怕,這裡並不講Groovy,這裡可以使用一些簡單的groovy語法來定義參數變數
Groovy Script
框里輸入的選項如下
def str="hello,world" return ["greeting":str,"filename":"jenkins.txt"]
可以使用 def關鍵字定義一個變數,下面return里的內容可以做為參數在構建時使用.比如在bat腳本里可以使用%greeting%
來獲取鍵為greeting的參數的值.
節點級別參數
有些參數在不同的節點上是不一樣的,比如說某一個工具的位置,如果我們把它定義為項目級別,由工具在不同節點上安裝的位置可能是不一樣的,這樣就會造成部分節點上的構建失敗.這時候可以考慮把參數定義為節點級別.
進入Manage Jenkins>Manage Nodes
,進入管理頁面便會看到我們已經創建好的Jenkins節點,點擊某個基點後面的齒輪
圖標,在出現的介面里找到Node Properties
,勾選Environment variables
此時便可以輸入參數的名稱和值,點擊Add
按鈕則可以添加多個參數.完成後點擊Save
保存後便可以在腳本里使用剛定義的節點級別的變數了.
全局變數
全局變數對所有節點都有效,當某些變數不會因為環境的改變而改變,比如說構建的版本只有development和production時,就可以定義為全局變數.這樣不需要在每個項目里都重複定義了.
全局變數的定義也非常簡單,進入Manage Jenkins>Configure System
找到Global properties
並勾選Environment variables
出現的介面跟節點級別配置類似.
使用文件參數
Jenkins提供了靈活的配置選項,我們除了可以在Jenkins內部配置參數外,還可以以外部文件的形式提供配置參數,配置參數為name=value鍵值對形式,必須符合java properties文件格式.
下面講解如何使用配置文件.
我們新建一個自由式項目,滾動到Build Environment
欄,勾選Inject environment variables to the build process
,在Properties File Path
選項里輸入配置文件路徑,我放在了E盤裡,路徑為E:testenv.txt
,這個文件很簡單,裡面就一行內容,如下:
database=sqlserver
往下流動到Build
欄,新建一個 Execute windows bat command
,輸入以下內容
echo %database%
保存後點擊構建,可以看到控制台輸入sqlserver