持續整合 之 Jenkins
持續整合
Jenkins簡介
功能與優點
Jenkins是基於Java開發的一種持續整合工具,用於監控持續重複的工作,功能包括:
- 持續的軟體版本釋出/測試專案。
- 監控外部呼叫執行的工作。
跟其他持續整合相比,它的主要優點有:
- 開源,即免費。
- 支援多種平臺(windows、linux、os x都支援)。
- 安裝、配置簡單。
- Web視覺化管理介面,並且有豐富的tips幫助資訊。
Jenkins和Hudson的關係
Jenkins的前身是Hudson(Sun開發),2010年從Hudson分支出來。由於Sun被Oracle收購,後者聲稱擁有Hudson的商標所有權,前者被迫這樣做的。分支出來的Jenkins將繼續走open source道路,而Hudson可能會用於商業用途,二者都在繼續開發中
我的環境
如果對在Linux下安裝有恐懼症的,BitNami提供了jenkins的一鍵安裝程式,簡單、易用、方便,可在https://bitnami.com/stack/jenkins中下載,windows、linux、OS X平臺都有提供。我是在linux環境下安裝的Jenkins,環境如下:
所需軟體 | 版本 |
---|---|
伺服器作業系統 | Debian |
Jenkins軟體版本 | bitnami-jenkins-1.617-0-linux-installer.run |
安裝
安裝Jenkins
由於用的是bitnami-jenkins,所以安裝過程很簡單。將bitnami-jenkins-1.606-0-linux-installer.run拷貝至linux中,增加可執行許可權,然後直接執行該安裝檔案即可。
安裝嚮導很簡單,這裡不介紹。需要注意的是:務必記錄下安裝過程中設定的管理員賬戶和密碼,等下要用到。
啟動Jenkins服務
安裝完bitnami-jenkins,最後一步就會提示你啟動Jenkins服務。除了可以用這種“圖形介面”的方式來啟動Jenkins服務之外,還可以通過“命令列”方式來啟動/停止Jenkins服務。
#/home/ci/jenkins-1.617-0/ctlscript.sh status /*檢視Jenkins服務狀態*/ #/home/ci/jenkins-1.617-0/ctlscript.sh start /*啟動Jenkins服務*/ #/home/ci/jenkins-1.617-0/ctlscript.sh stop /*停止Jenkins服務*/
開始體驗
管理員登陸
安裝完,在瀏覽器中輸入http://localhost:8080/jenkins,就能看到效果了,如下圖所示,如果無法開啟,就要檢視日誌了,日誌輸出到安裝路徑的log目錄下。
輸入管理員使用者名稱和密碼即可登入:
新建一個任務
點選“新建”,新建一個任務。我要通過shell進行編譯、構建,所以新建任務時選擇的型別是“構建一個多配置專案”,如下圖所示。
輸入專案名稱
輸入專案名稱,我這裡命名為ProjTest。同時我也勾選了“丟棄舊的構建”,這項功能主要是為了節省伺服器空間,我設定為“保持構建的最大個數”為30,超過的Jenkins會自動刪除舊的構建。
與程式碼版本管理工具整合
Jenkins支援常用的程式碼版本管理軟體。通過此項設定,Jenkins會自動從程式碼版本管理的伺服器下載原始碼,並自動構建。以下以SVN為例進行說明。
在原始碼管理中選擇“Subversion”,在“Repository URL”中輸入版本庫地址,如果你輸入的地址有誤,會提示“Repository URL is required.”,如下圖所示。
輸入正確的版本庫地址,結果還是提示有誤,如下所示。
錯誤提示資訊為:
Unable to access svn://172.16.1.4/專案管理/C 行業GPS專案區/兩標視訊終端專案/A 程式程式碼 : svn: E200015: No credential to try. Authentication failed (show details)
(Maybe you need to enter credential?)
這是因為Jenkins所在的伺服器沒有訪問過SVN版本庫,無法通過身份驗證,解決辦法就是在Jenkins所在伺服器訪問一次SVN版本庫,如下所示:
$ ssh [email protected]
[email protected]'s password:
Last login: Fri Jul 24 10:13:39 2015
[[email protected]:/home/ci]#
[[email protected]:/home/ci]#svn info "svn://172.16.1.4/專案管理/C 行業GPS專案區/兩標視訊終端專案/A 程式程式碼"
認證領域: <svn://172.16.1.4:3690> This is YF1's Source SVN
“ci”的密碼:
認證領域: <svn://172.16.1.4:3690> This is YF1's Source SVN
使用者名稱: xzp
“xzp”的密碼:
-----------------------------------------------------------------------
注意! 你的密碼,對於認證域:
<svn://172.16.1.4:3690> This is YF1's Source SVN
只能明文儲存在磁碟上! 如果可能的話,請考慮配置你的系統,讓 Subversion
可以儲存加密後的密碼。請參閱文件以獲得詳細資訊。
你可以通過在“/home/ci/.subversion/servers”中設定選項“store-plaintext-passwords”為“yes”或“no”,
來避免再次出現此警告。
-----------------------------------------------------------------------
儲存未加密的密碼(yes/no)?yes
路徑: A 程式程式碼
URL: svn://172.16.1.4/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/C%20%E8%A1%8C%E4%B8%9AGPS%E9%A1%B9%E7%9B%AE%E5%8C%BA/%E4%B8
5%BA%8F%E4%BB%A3%E7%A0%81
版本庫根: svn://172.16.1.4/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86
版本庫 UUID: c69c5511-93e5-fc4f-99f1-8de8aae1ea61
版本: 7026
節點種類: 目錄
最後修改的作者: rf
最後修改的版本: 7005
最後修改的時間: 2015-07-16 10:24:45 +0800 (四, 2015-07-16)
[[email protected]:/home/ci]#
設定構建觸發器
也就是什麼時候開始自動構建。這裡可以有不同方案,大家一看就知道是什麼意思。我這裡選擇Poll SCM,該方案能定時檢程式碼版本庫是否有新的提交,如果有則自動構建。我設定的日程表是“H/5 * * * *”,即5分鐘自動檢查一次程式碼版本庫是否有新的提交。
配置如何構建
構建方式有很多種,我這裡選擇shell,因為我要用makefile來編譯原始碼。需要提醒的是這裡的SHELL是由Jenkins啟動的,Jenkins設定了很多自己的環境變數,可以通過env打印出來研究下,裡面很多資訊是可以使用的。
釋出構建結果
Jenkins自動構建完後,可以將構建結果存檔(如程式版本),以方便大家下載使用,可以通過“構建後操作”的“Archive the artifacts”來實現。
其他說明
從下圖的構建歷史可以看出,藍色表明構建成功,紅色表明構建失敗。在測試的過程中,程式碼版本庫都沒有新的提價,如何觸發構建?可以通過“立即構建”來觸發。
授權管理
一切都整好後,發現匿名使用者竟然能訪問“工作區”,能看到原始碼。這應該要杜絕。好在Jenkins有豐富的“專案矩陣授權策略”能達到我們要的效果。
用管理員登陸Jenkins,進入“系統管理 > Configure Global Security”,這裡有個“授權策略”,選擇“專案矩陣授權策略”,在這裡就能限制匿名使用者的許可權了。我對匿名使用者的限制是:不允許訪問工作區,不允許訪問原始碼,可以下載構建後的歸檔檔案。
總結
本次介紹Jenkins只是個入門級別的,想要深入的修行,還是得靠個人。對本次使用Jenkins做個簡要總結:
- 安裝簡單,Web視覺化管理介面,容易上手。
- 能與程式碼版本管理軟體結合,自動檢測是否有新提交,並自動構建。
- 每次構建結果能自動歸檔,以便回溯,或供他人下載。