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