持續集成 之 Jenkins

作者:許振坪,http://blog.csdn.net/benkaoya

持續集成

有關持續集成的簡介,可參考我此前的文章:http://blog.csdn.net/benkaoya/article/details/44993583

Jenkins簡介

官網:http://jenkins-ci.org/

功能與優點

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做個簡要總結:

  1. 安裝簡單,Web可視化管理界面,容易上手。
  2. 能與代碼版本管理軟件結合,自動檢測是否有新提交,並自動構建。
  3. 每次構建結果能自動歸檔,以便回溯,或供他人下載。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章