作者:許振坪,http://blog.csdn.net/benkaoya
持續集成
有關持續集成的簡介,可參考我此前的文章:http://blog.csdn.net/benkaoya/article/details/44993583
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
[ci@localhost:/home/ci]#
[ci@localhost:/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)
[ci@localhost:/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可視化管理界面,容易上手。
- 能與代碼版本管理軟件結合,自動檢測是否有新提交,並自動構建。
- 每次構建結果能自動歸檔,以便回溯,或供他人下載。