一、前言
持續集成(Continuous integration,簡稱CI)指的是,頻繁地(一天多次)將代碼集成到主干。
持續集成的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,代碼集成到主干之前,必須通過自動化測試。只要有一個測試用例失敗,就不能集成。
Jenkins 是基於 Java 開發的一種持續集成工具,用於監控持續重復的工作,下載地址:https://bitnami.com/stack/jenkins/installer,提供了 Windows、Linux 和 OS X 平台的安裝包。最簡便的還是使用提供的 war 包直接啟動,下載地址:http://mirrors.jenkins-ci.org/,此時必須保證系統中已經安裝了 jdk,最好是 jdk1.5 以上。
二、初始化 Jenkins 插件和管理員用戶
下載好 jenkins.war 包之后,在 cmd 下切換到下載目錄,然后執行如下命令:
java -jar jenkins.war
啟動了自帶的 Jetty 服務器
生成隨機口令
這樣,jenkins 就開始啟動了,它的 war 包中自帶 Jetty 服務器,第一次啟動 Jenkins 時,出於安全考慮,Jenkins 會自動生成一個隨機的安裝口令。注意控制台輸出的口令,復制下來。在瀏覽器中輸入地址:
首次啟動 jenkins 時如果發現一直卡在啟動界面,提示:Jenkins正在啟動,請稍后...
你可以按 Ctrl + C 強制結束啟動,然后再次執行上面的命令,發現就會繼續啟動了,或者可以修改一下配置文件,因為你所在網絡可能被限制了,如下:
進入 jenkins 的工作目錄,默認是:C:\Users\Administrator\.jenkins
也可以自定義 jenkins 的工作目錄,設置 JENKINS_HOME 環境變量,啟動 jenkins.war 后將被解壓到 JENKINS_HOME 目錄下,同時所有 jenkins 的 plugins 和 配置文件等也將被寫入到 JENKINS_HOME 所設置的目錄下。
打開 hudson.model.UpdateCenter.xml,將 http://updates.jenkins-ci.org/update-center.json 替換成 http://mirror.xmission.com/jenkins/updates/update-center.json,還是不行的話找到 updates 目錄下的 default.json 把里面所有的谷歌地址改成百度的,即將 http://www.google.com/ 替換為 http://www.baidu.com/。
2.1 進入如下頁面,輸入上面出現的口令
啟動后第一次進入如下頁面
2.2 進入選擇安裝插件的頁面后,可以選擇安裝社區推薦的插件或自定義安裝,此處選擇前者
一般至少需要安裝如下幾個插件:
Git/Subversion、SSH、Publish Over SSH、Maven 等。
2.3 創建管理員用戶
填入賬戶信息后,進入完成頁面:
安裝完成。
三、配置 Jenkins 構建工具
用管理員賬號第一次登錄 Jenkins 后,需要在 "系統管理" -> "全局工具配置" 中,設置你要使用到的構建工具和 JDK 版本。
3.1 進入 jenkins 主界面
3.2 進入全局工具配置頁面
點擊 "系統管理" -> "全局工具配置"
進入后配置構建工具
3.3 配置 Maven
如果機器上已經安裝了 Maven,則在 Maven_HOME 輸入框中提供具體的安裝路徑。否則,你可以選擇需要的 maven 版本,讓 Jenkins 為你自動下載 maven。
3.4 配置 JDK
同理,如果機器上已經安裝了 JDK,則在 JAVA_HOME 輸入框中提供具體的安裝路徑。否則,你可以選擇需要的 JDK 版本,讓 Jenkins 為你自動下載 JDK。
3.5 配置 Git
如果之前沒有為 Jenkins 安裝 Git、Subversion(SVN)或 CVS 插件,可以在 "系統管理" -> "管理插件" 中安裝。
四、構建作業
構建作業是 Jenkins 構建過程的核心。
4.1 點擊創建一個新任務,進入創建項目類型選擇頁面
如果發現沒有 "構建一個maven項目" 這一項,則需要安裝 Maven Integration 插件,如下:
4.2 進入構建作業的詳細頁面
4.3 源碼管理
根據自己項目的實際情況選擇源碼管理的方式:
4.4 構建觸發器
其中有 5 個參數,分別表示:
MINUTE:Minutes within the hour(0-59)
HOUR:The hour of the day(0-23)
DOM:The day of the month(1-31)
MONTH:The month(1-12)
DOW:The day of the week(0-7)where 0 and 7 are sunday
常用配置:
0 * * * * 為每個小時執行一次
0 1 * * * 為沒天的凌晨1點執行一次,這種配置的設置,適合執行一些冒煙的測試用例
第一個參數:min,0-59
第二個參數:hour:0-23
第三個參數:day:0-31
第四個參數:month:1-12
第五個參數:week:0-7(0 和 7 代表 Sunday)
Jenkins 中 "Poll SCM" 和 "Build periodically"的區別
Poll SCM:定時檢查源碼變更(根據SCM軟件的版本號),如果有更新就checkout最新code下來,然后執行構建動作,配置如下:
*/5 * * * * (每5分鍾檢查一次源碼變化)
Build periodically:周期進行項目構建(它不care源碼是否發生變化),配置如下:
0 2 * * * (每天2:00 必須build一次源碼)
4.5 構建
在 "Build" 中,默認的項目根目錄的 Root POM,即 pom.xml。如果 pom.xml 不在根目錄下,就填入子目錄,例如:cloud/pom.xml。
如果源碼管理中選擇 "None",此處點 "高級..." 可以自定義工作空間中的項目地址,如下:
保存上面的構建作業:
五、構建
構建作業之后,就可以執行構建過程了。
5.1 執行構建的方式
第一種:點擊任務名稱的右邊的小三角,然后點擊 "立即構建"
第二種:按照 "構建觸發器" 中設置的 "日程表"定時自動觸發構建
5.2 構建結果
第一列是 "上次構建狀態顯示",是一個圓形圖標,一般分為四種:
藍色:構建成功;
黃色:不確定,可能構建成功,但包含錯誤;
紅色:構建失敗;
灰色:項目從未構建過,或者被禁用;
如上顯示藍色,表示構建成功。
注意:手動觸發構建的時間與自動定時構建的時間互不影響。
5.3 查看控制台輸出
可以查看構建成功的控制台輸出:
控制台信息顯示將構建的 jar 包從項目的 target 目錄下歸檔到了 jenkins 指定的目錄下了
此目錄顯示按照不同的構建編號,構建成功的項目
這與該工程的構建歷史中的編號相對應
如果構建失敗,可以通過查看構建失敗的控制台輸出,來得到具體的出錯信息,便於調試
點擊后查看錯誤信息,如下:
第二列是 "編譯晴雨表",如下:
如果看到你項目變成陰雲或者下雨,說明你的項目穩定性不好,需要去查找原因,解決問題。
5.4 部署
如果要部署構建好的 war 包,可以在 Post Steps 中填上 shell 命令,直接用腳本部署。
另一種方式是創建另外一個構建項目,手動觸發部署。
無論用哪種方式,都是為了確保編譯、部署是通過持續集成服務器完成的,而不是某台開發機器。