0. 簡介
1. Freestyle project
2. Maven 項目
3. 流水線
4. 多配置項目
0. 簡介
Jenkins 根據不同的項目需求對項目類型進行了分類,對於大多數項目類型,配置頁面上都有常見的選項,比如基礎設置、構建、源碼管理等等。
下面簡單的介紹下 Jenkins 支持的項目類型以及最常用項目的配置項,有些項目類型必須安裝相應的插件后才能看到,比如 maven 項目。如果在第 1 次配置 Jenkins 時安裝了推薦的插件后,在 Jenkins 首頁單擊新建 item 可以看到以下幾種項目:
1. Freestyle project
自由風格的項目:
1)General
用來為項目設定一些全局性的選項。
Discard old build(丟棄舊的構建)
作用:用來設置 Jenkins 的 jobs 保留最近幾次的構建結果,可以避免占用大量的磁盤空間。
參數:
- 策略:只有一個默認值選項 Log Rotation,無須修改;
- 保持構建的天數:設置保留最近幾天的構建結果;保持構建的最大個數:設置保留最近幾次的構建結果。
- 高級:也可以進一步對制品的刪除策略進行設置。一般不用設置
This project is parameterized(參數化構建)
作用:參數化構建,可以單擊添加參數,在每次構建之前需要用戶給參數賦值,根據不用的參數值執行不同的處理流程。
Throttle build(節流構建)
作用:允許在一個指定的時間段內進行構建的次數。
參數:
- Number of builds:構建的次數
- Time period:設置指定的時間段,單位可以是年、月、日、周、時、分、秒
關閉構建
作用:勾選此復選框后,此項目不會再執行。
在必要的時候並發構建
作用:默認情況下,不允許同一個項目執行並發構建。
勾選此復選框后,並且有足夠的執行節點的話,就會執行並行構建。這一功能對長時間的構建項目或者是多場景的項目會很有用。
注意:在並發構建時,工作空間名稱會附加 @#(其中 # 是一個數字)用於區分工作空間。但是如果沒有使用默認工作空間的話,則所有並發構建都是在同一工作空間運行。
限制項目的運行節點
勾選此復選框后,允許你通過標簽表達式來指定某一個或多個“標簽”指定的節點來運行此項目。注意:標簽是添加節點時設置的名稱。
單擊限制項目的運行節點選項下方的高級按鈕,可以設置一些附件選項,具體如下:
Quiet period(安靜期):
作用:設置在項目構建前等待的秒數。如果這里沒有設置,則使用系統默認的全局安靜期。
此項主要用於支持遺留問題,比如 CVS,需要等待所有文件提交完成后才能開始構建,而不是在系統看到第一個時就開始執行。
重試次數:
作用:用於重試 SCM( Source Control Management)的檢出次數。兩次嘗試之間有 10s 的間隔。
當上游項目正在構建時阻止構建:
作用:勾選此復選框后,如果此項目的某個依賴的上游項目正在構建或處於隊列中時,則不允許構建該項目。
當下游項目正在構建時阻止構建:
作用:勾選此復選框后,如果其中的一個子項目正在構建或處於隊列中,時,則不允許構建該項目。
使用自定義工作空間:
作用:Jenkins 默認的工作空間是在“C:\Users\xxx\.Jenkins\workspace\項目名稱”目錄下,也可以在此處指定自定義的工作空間。
參數:
- 目錄:指定工作空間的位置,可以是絕對路徑也可以是相對路徑,如果是相對路徑,則相對的是節點的根目錄。注意:千萬不要直接寫磁盤的根目錄,否則執行構建時會將目錄下所有的內容刪除!!
- 顯示名稱:在 Jenkins web 界面中顯示的值。
保留依賴的構建日志:
為了保留有上下游依賴的構建日志,此配置會覆蓋日志循環策略。
2)源碼管理
根據安裝的插件不同,界面中看到的配置項會有所差異,但是也都是大同小異,最常見的配置如下:
- 倉庫 URL:設置項目中能夠訪問的倉庫位置,比如源碼的存放位置,或者測試腳本的存放位置等。
- 憑證:用於訪問 SCM 的用戶名密碼、ssh 密鑰、token 等憑證。
- 版本:配置要使用的代碼的具體版本。
- git 倉庫的配置項。
3)構建觸發器
構建觸發器用來設置觸發項目構建的時間或者事件。
觸發遠程構建
勾選此復選框之后,Jenkins 會提供一個特定的 URL 用來觸發項目的自動構建,可以看下面的那行提示信息。為了安全起見,可以看到在 URL 之后還會要求有一個用於授權的 Token 字段(需要在 Manage Jenkins-->Manage Users 中對用戶進行設置)。這樣就可以使用 wget 或 curl 這樣的工具觸發構建。
Build after other projects are built(其它項目構建完成后構建)
用來設置在某個項目構建完成后才能觸發本項目的構建。而且可以對其它項目的具體構建結果進行設定,比如,穩定的(成功),不穩定的,失敗的。比如我們需要在 war 包發布成功后,再進行測試腳本的執行,這種場景下就可以配置此項。
Build periodically(周期性構建)
這是一種類似於 crontab 命令的功能,可以指定在某個或某些具體時間自動進行項目的執行。包含 5 個字段,這些字段以空格或者 Tab 鍵分割,用來指定多久去執行一次構建。格式為:
- MINUTES:一小時內的分鍾,取值范圍(0-59)
- HOURS:一天內的小時,取值范圍(0-23)
- DAYMONTH :一個月中的某一天,取值范圍(1-31)
- MONTH :月份,取值范圍(1-12)
- DAYWEEK:一周中的星期幾,取值范圍(0-7)。0 和 7 都表示星期日
還可以使用特殊的字符一次指定多個值:
- *:匹配所有的值
- N:匹配 M-N 之間的值
- M-N/<VALUE> 或者 */<value>:表示每隔 <value>,比如 */5 每隔 5 分鍾
- A,B,...Z:多個枚舉值
- 5H:可以用於任何字段,用來告訴 Jenkins 在一個范圍內使用該項目名的散列值計算出一個唯一的偏移量,這個偏移量於范圍內的最小值相加后定義為實際的執行時間。注意:這個值是項目名的散列值,那么每一個值都與其他項目是不同的,但是同一個項目的值是不變的。
H 符號在實際的項目中是非常推薦使用的,因為在大型的項目中可能存在多個同一時刻需要執行任務,比如(0 0 * * *),都需要在半夜零點啟動,那么使用 H 后,從散列算法獲得的偏移量,就可以錯開執行具有相同 cron 時間的項目。
示例:
# every fifteen minutes (perhaps at :07, :22, :37, :52). H/15 * * * * # every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24). H(0-29)/10 * * * * # once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday. 45 9-16/2 * * 1-5 # once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM). H H(9-16)/2 * * 1-5 # once a day on the 1st and 15th of every month except December. H H 1,15 1-11 *
Generic Webhook Trigger
一種通用的生成 webhook 的插件,不局限於 github。
Github hook trigger for GITScm polling
專門針對於 github 倉庫的配置項,需要安裝 Github Integration plugin 插件才能看到。
這種方式要求設置一個 github 服務,以便在 github 倉庫中有指定的事件發生時,向 Jenkins 發送通知,而無需 Jenkins 不斷的輪詢。
Poll SCM(輪詢 SCM)
就是定期到指定的代碼倉庫查詢是否有變化,如果有變化就執行。語法同 cron 是一樣的。
與周期性構建的區別就是,讓 Jenkins 在指定的時間去檢查代碼倉庫是否有變化,有變化了才運行項目,而不是直接到點了就運行項目。
注意:最下面一行有一個復選框,忽略 post-commit 鈎子,就是告訴 Jenkins 要忽略來自鈎子的信號,目的就是為了防止重復觸發操作。
4)構建環境
可以用來對項目指定某些全局操作和集成設置。這些選項有很多,根據安裝的插件不同,顯示出來的也不同。
Delete workspace before build starts(構建前刪除工作空間)
就是在構建前先將工作空間刪除。
Use secret text(s) or file(s)(使用機密文本或文件)
安裝了憑證綁定插件(Credentials Biding plugin)才會看到此配置項。創建憑證時會為其指定一個全局變量名,然后就可以在任務中使用此全局變量代替憑證中的敏感信息,在執行構建時,會將實際值對全局變量進行替換。
下圖以用戶名和密碼為例:
Abort the build if it's stuck
用來配置超時的策略和指定值,以便在構建時間過長時停止構建,有 3 個可以配置的參數:
1)Time-out strategy:可以使用的策略有 5 種:
- Absolute(絕對的):根據固定的超時時間中止構建;
- Deadline(截止時間):截止時間格式為 HH:MM:SS
- Elastic(彈性):定義終止構建前的等待時間,以最后 n 次成功構建的平均持續時間的百分比表示
- Likely stuck(可能卡住):當任務運行的時間比以前多很多倍時,終止構建
- No Activity(沒有活動):自上次日志輸出后,經過指定的秒數后觸發超時
2) Time-out variable:定義一個自動填充超時的環境變量,以 ms 為單位,可以在任務中引用此變量,如:
3) Time-out actions:用來定義超時之后采取的行動,包括終止構建、構建失敗以及將信息寫入到正在運行任務的描述字段中。
示例:
Add timestamps to the Console Output
顧名思義,就是在控制台打印執行日志的時候加上時間戳顯示,如下:
其它構建環境選項
如果安裝了其它插件,可能會看到更多的環境選項,比如 Ant、gradle 或者 Maven,需要的話可以單擊選項右側的藍色問號查看幫助信息即可。
5)構建
此部分是項目中的主要實現邏輯,根據項目類型的不同,在此配置項目中看到的功能也會有所不同,最常用的就是 shell 命令或者 windows 下的批處理命令。在后續的項目實戰中會對此配置做具體的說明。
6)構建后操作
用來設置在項目執行完畢后做的一些操作,比如,發郵件,將構建結果發布到指定的目錄等等。有些是需要安裝特定的插件才能看到對應的配置項,如下:
同樣地,此部分在后續的項目實戰中會對此配置做具體的說明。
2. Maven 項目
1)所有配置項
可以看出,大部分的配置項和自由風格的項目類似,只是將構建的步驟拆分為了 3 個,分別為:Pre Step、Build 和 Post Steps。將一些傳統的非 Maven 構建步驟移到 Pre Step 和 Post Steps 中,這兩步支持的步驟都是相同的。
2)Build
默認使用項目根 POM 文件名,也就是 pom.xml 名,也可以指定實際適使用的具體的文件路徑,比如 parent/pom.xml。在 maven 項目中會自動對制品進行歸檔。
3. 流水線
流水線項目是將來主流的 Jenkins 任務實現方式,也是 Jenkins 社區極力推崇的,目的是將任務中的步驟和邏輯使用 Groovy 腳本實現,而不用繁瑣的表單配置,更符合程序員的思維。
1)所有配置項
有一個專門的流水線配置項,其它項可參考自由風格項目中的配置說明。
2)流水線
有 2 種定義方式,分別為:
Pipeline script :默認值,可以在富文本框中直接輸入 pipeline 腳本。
Pipeline script from SCM:需要制指定 Jenkinsfile 的倉庫位置輕量級檢出項的作用是,開始時只檢查 Jenkinsfile 文件而不是整個項目,然后通過 Jenkins file 執行 checkout scm 語句,可避免兩次檢出整個項目,提升效率。
注意:通過配置項目中我們可以看到,在流水線項目中也會有一些簡單的表單配置項,比如參數化構建,這些參數可以在流水線部分定義的腳本中進行訪問,但是如果使用的是 Jenkins file 的話,文件本身和配置是分開的,使用起來會不方便,這時最好是在 Jenkins file 中定義此功能。
4. 多配置項目
此類型的項目和自由風格的項目配置比較類似,主要是多了一個 Configuration Matrix 項。
此類項目用來做多場景多配置的混合測試,比如說要使用 Chrome、Firefox 和 IE 瀏覽器分別測試,還要使用 Windows、MAC 等系統運行測試構建。如果沒有這種項目類型,那么需要 3*2 也就是 6 個任務來重復做同樣的流程。
1)所有配置項
可以看到多配置的項目和其它項目類似,重點是多了 Configuration Matrix 項。
2)Configuration Matrix
可以在此項中定義 3 種類型的坐標軸,每個坐標軸有 1 個名稱,每個名稱對應一個環境變量。可以添加到配置矩陣中的坐標軸類型有以下 4 種:
- JDK:用來定義不同的 JDK 版本的標簽,如果項目需要在不同的 JDK 下測試可以添加此種來下的坐標軸。
- Label expression:用來使用高級語法選擇要包含哪個節點的集合。例如,node1$$node2 表示只有具有這兩個標簽的節點才有資格包含在內。
- Slaves:指定所使用節點的名稱,或者節點的標簽。
- User-defined Axis:用戶自定義的一組值,用來在構建任務時進行迭代。
示例:
Configuration Matrix 添加 2 個坐標軸,分別為:
構建部分的內容如下:
echo "******************start" echo "Executing Configuration Matrix %browser% for %label%" echo "******************end
配置成功后,在項目首頁看到的任務矩陣如下:
相當於會執行 6 遍,分別使用 6 個不同的配置。