本系列已經很久沒有更新了,接前面基礎篇,本系統主要介紹jenkins構建里的一些高級特性.包括腳本參數化,Jenkins Pipeline與及在PipeLine模式下如何執行常見的傳統構建任務(這里指jenkins自由風格構建模式),jenkins cli,jenkins ssh,jenkins任務調度,資源調度,jenkins任務遠程觸發,jenkins混合集群搭建(同時包含windows和linux節點)等高級功能.
jenkins參數化構建
在一些復雜的構建中,我們可能需要指定很多參數,如果這些參數都寫死在cmd或者powershell腳本或者ssh腳本里,腳本的可擴展性將嚴重受限,最為重要的是修改構建腳本可能會造成嚴重后果(尤其是一些非常復雜的腳本),這里的一個最佳實踐就是不要輕易更改生產環境的腳本文件.而參數化構建可以大大增加腳本的可擴展性.
Jenkins提供了豐富的參數配置入口結合腳本自身的外部參數處理可以實現非常靈活的腳本參數配置.下面從腳本自身參數化選項,項目級參數化配置,節點級參數化配置以及全局參數配置來詳細講解如何在Jenkins里實現參數化配置.
腳本自身參數化配置
下面分別介紹bat腳本和powershell腳本如何接收外部參數
bat腳本接收外部參數
在windows bat腳本命令里,可以通過%0,%1,%2...以此類推來接收外部傳入參數,其中%0為腳本自身的名稱,很多時候不是我們需要的,我們可以從%1開始接收外部傳入參數.我們假如有以下一個名為build.bat
的腳本,它用作構建測試環境和生產環境的腳本,測試環境和生產環境的構建可以通過一個外部參數來判斷.為了簡單起見我們並不使用真實環境的構建腳本,而是簡單模擬,希望讀者能夠舉一反三,聯系到真實環境應用場景.
這個bat腳本非常簡單,就一行代碼
echo %1
shell接收外部參數
在Jenkins中,除了powershell和bat命令外,其它地方接收外部參數的方法寫法都是shell語法寫法,即
${參數名}
形式
如果我們傳入什么就會打印什么,我們傳入development,或者production,bat腳本就會接收到它們.以上非常簡單,這里不在jenkins里單獨創建項目演示,大家可以自己動手試一試.
powershell接收外部參數
相對於windows cmd,powershell更為強大,也更為靈活.下面分別介紹powershell的位置參數
和命名參數
powershell位置參數
位置參數類似於上面講的cmd通過%0,%1獲取參數一樣,通過參數的順序來決定調用的是哪一個參數.在Powershell里,位置參數傳入到ps1文件后都存儲在了一個叫作$args的數組變量里,可以通過$args[0],$args[1]來獲取各位置上的參數(位置通過空格區分,如果參數包含空格需要加引號)
類似上面bat,我們新建一個叫作'build.ps1'的powershell腳本文件,代碼與上面的bat類似,如下
echo $args[0]
需要注意的是,powrshell腳本文件(即后綴名為ps1的文件)無法通過cmd命令窗口打開.需要使用powershell窗口或者調用powershell.exe來打開
ps1文件的執行方式
-
使用powrshell命令窗口打開,就像打開cmd命令一下打開powershell命令窗口,需要注意的是powershell窗口執行ps1文件需要使用相對路徑或者絕對路徑,比如你要打開一個名稱為
Build.ps1
的文件,打開方式應該是.\Build.ps1
(相對路徑形式)或者C:\build.ps1
形式,不能是直接Build.ps1
-
使用cmd打開powershell,在cmd中輸入
powershell
就會進入powershell命令窗口,和直接打開powershell命令窗口效果是一樣的. -
通過powrshell.exe 執行powershell命令.在cmd中輸入powershell.exe -File 要執行的ps1文件即可運行ps1腳本
第三種方式提供了一種在cmd環境執行powershell腳本的方法,這在jenkins環境中非常有用,可以不必使用powershell插件即可調用powershell腳本.
powershell 命名參數
很多時候,尤其在要傳入的參數非常多的時候,位置參數語義不是很清析,對於調試腳本很不方便,而命名參數可以在一定程度上使語義更清楚,出錯的可能性也會更小.下面就介紹一下powershell中的命名參數,我們新建一個名為build.ps1
(名稱可以隨便起)
param($build,$version)
echo "current build type is: $build,and the version is:$version"
以上腳本我們通過param關鍵字創建了兩個命名參數,$build和$version(powershell中參數命名前面要加一個$
符號),我們在當前腳本所在文件夾下打開powershell命令窗口,然后執行以下命令
.\build.ps1 -version 1.0 -build development
可以看到這里是通過-+參數名
的方式來傳入命名參數
可以看到輸出如下結果
current build type is: development,and the version is:1
大家可以看到,不管-version
和-build
位置如何,輸出的結果都是一樣的.
明眼的同學可能會發現一點小問題,那就是
-versoin
輸入的參數是1.0
而輸出的結果卻是1
,這是因為powershell把1.0當作數字來處理了,舍棄掉了沒有用的小數位,我們想要輸出1.0只需要把1.0用引號引起來就行了,當然還有其它辦法,那就是指定參數的類型,指定參數類型超出了本節講解的范圍.有興趣的童鞋可以查閱相關資料深入了解.