一、前言
持續(xù)集成(Continuous integration,簡(jiǎn)稱CI)指的是,頻繁地(一天多次)將代碼集成到主干。
持續(xù)集成的目的,就是讓產(chǎn)品可以快速迭代,同時(shí)還能保持高質(zhì)量。它的核心措施是,代碼集成到主干之前,必須通過自動(dòng)化測(cè)試。只要有一個(gè)測(cè)試用例失敗,就不能集成。
Jenkins 是基于 Java 開發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,下載地址:https://bitnami.com/stack/jenkins/installer,提供了 Windows、Linux 和 OS X 平臺(tái)的安裝包。最簡(jiǎn)便的還是使用提供的 war 包直接啟動(dòng),下載地址:http://mirrors.jenkins-ci.org/,此時(shí)必須保證系統(tǒng)中已經(jīng)安裝了 jdk,最好是 jdk1.5 以上。
二、初始化 Jenkins 插件和管理員用戶
下載好 jenkins.war 包之后,在 cmd 下切換到下載目錄,然后執(zhí)行如下命令:
java -jar jenkins.war
啟動(dòng)了自帶的 Jetty 服務(wù)器

生成隨機(jī)口令

這樣,jenkins 就開始啟動(dòng)了,它的 war 包中自帶 Jetty 服務(wù)器,第一次啟動(dòng) Jenkins 時(shí),出于安全考慮,Jenkins 會(huì)自動(dòng)生成一個(gè)隨機(jī)的安裝口令。注意控制臺(tái)輸出的口令,復(fù)制下來。在瀏覽器中輸入地址:
首次啟動(dòng) jenkins 時(shí)如果發(fā)現(xiàn)一直卡在啟動(dòng)界面,提示:Jenkins正在啟動(dòng),請(qǐng)稍后...
你可以按?Ctrl + C?強(qiáng)制結(jié)束啟動(dòng),然后再次執(zhí)行上面的命令,發(fā)現(xiàn)就會(huì)繼續(xù)啟動(dòng)了,或者可以修改一下配置文件,因?yàn)槟闼诰W(wǎng)絡(luò)可能被限制了,如下:
進(jìn)入 jenkins 的工作目錄,默認(rèn)是:C:\Users\Administrator\.jenkins
也可以自定義 jenkins 的工作目錄,設(shè)置?JENKINS_HOME?環(huán)境變量,啟動(dòng) jenkins.war 后將被解壓到 JENKINS_HOME 目錄下,同時(shí)所有 jenkins 的 plugins 和 配置文件等也將被寫入到 JENKINS_HOME 所設(shè)置的目錄下。
打開 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 進(jìn)入如下頁(yè)面,輸入上面出現(xiàn)的口令
啟動(dòng)后第一次進(jìn)入如下頁(yè)面

2.2 進(jìn)入選擇安裝插件的頁(yè)面后,可以選擇安裝社區(qū)推薦的插件或自定義安裝,此處選擇前者

一般至少需要安裝如下幾個(gè)插件:
Git/Subversion、SSH、Publish Over SSH、Maven 等。
2.3 創(chuàng)建管理員用戶

填入賬戶信息后,進(jìn)入完成頁(yè)面:

安裝完成。
三、配置 Jenkins 構(gòu)建工具
用管理員賬號(hào)第一次登錄 Jenkins 后,需要在?"系統(tǒng)管理" -> "全局工具配置"?中,設(shè)置你要使用到的構(gòu)建工具和 JDK 版本。
3.1 進(jìn)入 jenkins 主界面

3.2 進(jìn)入全局工具配置頁(yè)面
點(diǎn)擊?"系統(tǒng)管理" -> "全局工具配置"
進(jìn)入后配置構(gòu)建工具

3.3 配置 Maven
如果機(jī)器上已經(jīng)安裝了 Maven,則在?Maven_HOME?輸入框中提供具體的安裝路徑。否則,你可以選擇需要的 maven 版本,讓 Jenkins 為你自動(dòng)下載 maven。

3.4 配置 JDK
同理,如果機(jī)器上已經(jīng)安裝了 JDK,則在?JAVA_HOME?輸入框中提供具體的安裝路徑。否則,你可以選擇需要的 JDK 版本,讓 Jenkins 為你自動(dòng)下載 JDK。

3.5 配置 Git
如果之前沒有為 Jenkins 安裝 Git、Subversion(SVN)或 CVS 插件,可以在?"系統(tǒng)管理" -> "管理插件"?中安裝。

四、構(gòu)建作業(yè)
構(gòu)建作業(yè)是 Jenkins 構(gòu)建過程的核心。
4.1?點(diǎn)擊創(chuàng)建一個(gè)新任務(wù),進(jìn)入創(chuàng)建項(xiàng)目類型選擇頁(yè)面

如果發(fā)現(xiàn)沒有 "構(gòu)建一個(gè)maven項(xiàng)目" 這一項(xiàng),則需要安裝 Maven Integration 插件,如下:

4.2 進(jìn)入構(gòu)建作業(yè)的詳細(xì)頁(yè)面

4.3 源碼管理
根據(jù)自己項(xiàng)目的實(shí)際情況選擇源碼管理的方式:

4.4 構(gòu)建觸發(fā)器

其中有 5 個(gè)參數(shù),分別表示:
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 * * * * 為每個(gè)小時(shí)執(zhí)行一次
0 1 * * * 為沒天的凌晨1點(diǎn)執(zhí)行一次,這種配置的設(shè)置,適合執(zhí)行一些冒煙的測(cè)試用例
第一個(gè)參數(shù):min,0-59
第二個(gè)參數(shù):hour:0-23
第三個(gè)參數(shù):day:0-31
第四個(gè)參數(shù):month:1-12
第五個(gè)參數(shù):week:0-7(0 和 7 代表 Sunday)
Jenkins 中 "Poll SCM" 和 "Build periodically"的區(qū)別
Poll SCM:定時(shí)檢查源碼變更(根據(jù)SCM軟件的版本號(hào)),如果有更新就checkout最新code下來,然后執(zhí)行構(gòu)建動(dòng)作,配置如下:
*/5 * * * * (每5分鐘檢查一次源碼變化)
Build periodically:周期進(jìn)行項(xiàng)目構(gòu)建(它不care源碼是否發(fā)生變化),配置如下:
0 2 * * * (每天2:00 必須build一次源碼)
4.5 構(gòu)建

在 "Build" 中,默認(rèn)的項(xiàng)目根目錄的 Root POM,即 pom.xml。如果 pom.xml 不在根目錄下,就填入子目錄,例如:cloud/pom.xml。
如果源碼管理中選擇 "None",此處點(diǎn) "高級(jí)..." 可以自定義工作空間中的項(xiàng)目地址,如下:

保存上面的構(gòu)建作業(yè):

五、構(gòu)建
構(gòu)建作業(yè)之后,就可以執(zhí)行構(gòu)建過程了。
5.1 執(zhí)行構(gòu)建的方式
?第一種:點(diǎn)擊任務(wù)名稱的右邊的小三角,然后點(diǎn)擊 "立即構(gòu)建"

第二種:按照 "構(gòu)建觸發(fā)器" 中設(shè)置的 "日程表"定時(shí)自動(dòng)觸發(fā)構(gòu)建
5.2 構(gòu)建結(jié)果
第一列是 "上次構(gòu)建狀態(tài)顯示",是一個(gè)圓形圖標(biāo),一般分為四種:

藍(lán)色:構(gòu)建成功;

黃色:不確定,可能構(gòu)建成功,但包含錯(cuò)誤;

紅色:構(gòu)建失?。?/p>

灰色:項(xiàng)目從未構(gòu)建過,或者被禁用;
如上顯示藍(lán)色,表示構(gòu)建成功。
注意:手動(dòng)觸發(fā)構(gòu)建的時(shí)間與自動(dòng)定時(shí)構(gòu)建的時(shí)間互不影響。
5.3 查看控制臺(tái)輸出
可以查看構(gòu)建成功的控制臺(tái)輸出:



控制臺(tái)信息顯示將構(gòu)建的 jar 包從項(xiàng)目的 target 目錄下歸檔到了 jenkins 指定的目錄下了

此目錄顯示按照不同的構(gòu)建編號(hào),構(gòu)建成功的項(xiàng)目

這與該工程的構(gòu)建歷史中的編號(hào)相對(duì)應(yīng)

如果構(gòu)建失敗,可以通過查看構(gòu)建失敗的控制臺(tái)輸出,來得到具體的出錯(cuò)信息,便于調(diào)試

點(diǎn)擊后查看錯(cuò)誤信息,如下:

第二列是 "編譯晴雨表",如下:

如果看到你項(xiàng)目變成陰云或者下雨,說明你的項(xiàng)目穩(wěn)定性不好,需要去查找原因,解決問題。
5.4 部署
如果要部署構(gòu)建好的 war 包,可以在?Post Steps?中填上 shell 命令,直接用腳本部署。

另一種方式是創(chuàng)建另外一個(gè)構(gòu)建項(xiàng)目,手動(dòng)觸發(fā)部署。
無論用哪種方式,都是為了確保編譯、部署是通過持續(xù)集成服務(wù)器完成的,而不是某臺(tái)開發(fā)機(jī)器。