1. 程式人生 > >持續整合 之 Jenkins

持續整合 之 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做個簡要總結:

  1. 安裝簡單,Web視覺化管理介面,容易上手。
  2. 能與程式碼版本管理軟體結合,自動檢測是否有新提交,並自動構建。
  3. 每次構建結果能自動歸檔,以便回溯,或供他人下載。