1. 程式人生 > >[轉]使用jenkins實現持續整合

[轉]使用jenkins實現持續整合

本文轉自:https://www.cnblogs.com/zishengY/p/7170656.html

一、jenkins 介紹

  •   它是一個自動化的週期性的整合測試過程,從檢出程式碼、編譯構建、執行測試、結果記錄、測試統計等都是自動完成的,無需人工干預,有利於減少重複過程以節省時間、費用和工作量;
  • 它需要有專門的整合伺服器來執行整合構建;
  • 它需要有程式碼託管工具支援,比如SVN;
  • Jenkins的主要目標是監控軟體開發流程,快速顯示問題;
  • jenkins持續整合中的任何一個環節都是自動完成的,無需太多的人工干預,所以它有利於減少重複過程以節省時間、費用和工作量。

  

二、下載安裝啟動

本文介紹的是在CentOS系統下,用rpm包安裝方式進行啟動

2.1 安裝準備

軟體

版本

說明

JDK

1.7.0_76

解壓安裝,注意設定好環境變數

ant

1.9.9

JDK1.7.x只能安裝1.9.x系列ant

Jenkins

2.33

JDK1.7.x只能安裝Jenkins2.3.x系列Jenkins

2.2 安裝ant

ant是基於java的一款構建工具,通過配置build.xml,讓專案可以進行編譯,部署,打包。

因為我們要實現自動構建,所以首先要安裝ant。

  • http://ant.apache.org 上下載tar.gzant

  • wget http://www-eu.apache.org/dist//ant/binaries/apache-ant-1.9.9-bin.tar.gz

  • 解壓tar包

  • tar -zxvf apache-ant-1.9.9-bin.tar.gz

  • 移動到/usr/share

  • cp -r apache-ant-1.9.9 /usr/share

  • 切換到/usr/share目錄下,重新命名

  • cd /usr/share

  • mv apache-ant-1.9.9 ant

  • 配置環境變數

  • vi /etc/profile

#set Ant enviroment

export ANT_HOME=/usr/share/ant

export PATH=PATHPATH: ANT_HOME/bin

  • 立刻將配置生效

  • source /etc/proifle

  • 測試ant是否生效

  • ant -version

出現如下提示便表示安裝成功。

ant的使用檢視這篇文章:ant在持續整合的應用

2.3 解除安裝及安裝jenkins

2.3.1 解除安裝原來安裝的rpm包

  首先檢視是否已經安裝過jenkins
rpm -qa|grep jenkins
   我這裡用的是jdk1.7,所以下載版本 http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm(jenkins下載地址:http://pkg.jenkins-ci.org/redhat/),    原先現在2.5版本以上,版本太高,啟動報“java.lang.UnsupportedClassVersionError”錯,所以要解除安裝之前安裝的jenkins-2.54-1.1.noarch,使用如下命令
# 解除安裝原先高版本的jenkins
rpm -e nodeps jenkins-2.54-1.1.noarch

2.3.2 安裝jenkins

# 下載jenkins-2.33-1.1.noarch.rpm
wget http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm
#安裝jenkins-2.33-1.1.noarch.rpm
sudo rpm -ih jenkins-2.33-1.1.noarch.rpm

出現如下圖

表示安裝成功,安裝成功會自動生成下面檔案: 

/usr/lib/jenkins/jenkins.war            #WAR包 
/etc/sysconfig/jenkins                  #配置檔案
/var/lib/jenkins/                       #預設的JENKINS_HOME目錄
/var/log/jenkins/jenkins.log            #Jenkins日誌檔案

2.4 啟動

啟動用如下命令:

sudo service jenkins start

 報瞭如下錯誤:

會報這個錯誤,這是由於沒有配置java環境,有兩種方法可以解決:

2.4.1 安裝jdk環境

  先檢查一下java虛擬機器有沒有安裝,如果沒有就安裝

java --version

2.4.2 在jenkins配置檔案中配置

  需要“vi /etc/init.d/jenkins”,把jdk路徑加上,如下:

複製程式碼
# Search usable Java as /usr/bin/java might not point to minimal version required by Jenkins.
# see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
/home/lutong/soft/jdk1.7.0_76/bin/java
"
for candidate in $candidates
do
  [ -x "$JENKINS_JAVA_CMD" ] && break
  JENKINS_JAVA_CMD="$candidate"
done

JAVA_CMD="$JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -DJENKINS_HOME=$JENKINS_HOME -jar $JENKINS_WAR"
PARAMS="--logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon"
複製程式碼

上述配置檔案中紅色加粗字型的內容是我配置自己的jdk路徑。由於我的系統中的java是自己解壓安裝的,所以我採用了第二種方式

再次啟動jenkins:

 

三、預設配置修改及初始化

3.1 修改配置檔案

上面我們有提到配置檔案是/etc/sysconfig/jenkins,修改如下兩項配置(根據實際需要設定)

#修改為18080,預設是8080
JENKINS_PORT="18080"
#記憶體設定,我這裡設定成如下配置
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=1024m"

3.2 初始化

  • 在瀏覽器中輸入172.16.7.109:8080/jenkins(預設是使用8080埠)

開啟jenkins的後臺控制頁面

初始化成功後會自動生成一個管理員密碼放到指定位置,根據頁面提示覆制密碼貼上到輸入框就可以登入了


3.3 初始化安裝外掛

  • 登入成功後回讓你選擇外掛的安裝,可以選擇建議的安裝也可以自己進行選擇,不清楚的話可以使用建議的安裝

    由於建議安裝的外掛比較多,安裝的過程有點慢,多等待一會

  • 由於建議安裝的外掛比較多,安裝的過程有點慢,多等待一會

  •  

  • 安裝的過程也可能因為網路等一些原因安裝會失敗,現在可以無視它,點選Continue,後面再進行手動的安裝


  • 安裝完成
  • 安裝完成後最好新建立一個管理員賬戶代替之前的臨時自動生成的密碼賬戶
  • 建立新的管理員賬戶
  • 初始化完成,進入後臺管理介面

     


    初始化完成

    後臺管理介面

    3.4 初始化配置

    3.4.1 修改工作空間

    從主頁面直接到“系統管理>系統配置”,點選右邊“高階”按鈕

    在工作空間目錄”直接修改預設工作空間目錄為自定義的/home/jenkins/workspace/${ITEM_FULLNAME},如下圖:

     

    3.4.2 全域性配置ant

    從主頁面直接到“系統管理>Global Tool Configuration”,點選右邊“Ant安裝”按鈕,

    在name中填入名字,可以自己取,這裡我填寫成ant(到時Invoke Ant時,需要選擇ant),ANT_HOME填入Ant的環境變數

     

     3.4.3 全域性配置JDK

    從主頁面直接到“系統管理>Global Tool Configuration”,點選右邊“JDK安裝”按鈕,

     

     

     在name中填入名字,可以自己取,這裡我填寫成ant(到時Invoke Ant時,需要選擇ant),ANT_HOME填入Ant的環境變數

    3.4.4 配置Credentials

    這裡主要是新增信任證書,因為我的工程的原始碼是放在SVN上,所以在這裡我們就是要新增SVN的驗證,即SVN的使用者名稱和密碼。

    從主頁面左邊選單點選到“Credentials”,進入到 Credentials列表,如圖所示:

     

    點選Name列中即可對Credentials中使用者進行修改、新增、刪除操作,如下圖所示:

     

    修改完後,點選下面“Save”儲存按鈕即可

     

四、建立 Jenkins 自動化持續整合專案

4.1 安裝外掛

4.1.1 常用外掛

  一般情況下,常使用到如下這些外掛:

  • FindBugs Plug-in: 是一個靜態分析工具,它檢查類或者 JAR 檔案,將位元組碼與一組缺陷模式進行對 比以發現可能的問題。
  • Checkstyle Plug-in:是一個靜態分析工具,檢查Java程式程式碼。
  • Deploy to container Plugin:用於構建專案後,自動釋出war包重新部署的外掛
  • SSH Plugin:這個外掛使用 SSH 協議執行遠端 shell 命令。
  • Multijob Plugin:這個外掛是一個將多個專案連線在一起的外掛。

4.1.2 安裝步驟

  下面以安裝Checkstyle外掛為例進行說明:

在左上角“系統管理”中往下拉,找到“管理外掛”點選進去就可以檢視和管理所有的外掛,點選“可選外掛”顯示所有jenkins支援的外掛,在右上角的“過濾”輸入框中,輸入需要安裝的外掛名就可以篩選查詢到想要的外掛

  然後切換到“可選外掛”,在右上角“過濾”框中輸入checkstyle,查詢結果如下

然後,點選“直接安裝”按鈕,其他外掛也是這樣的安裝方式!

4.2 建立專案

4.2.1 新建專案

下面以建立一個自由風格軟體專案為例進行說明

  • 點選左側邊欄的“新建”按鈕,新建一個任務。
  • 填寫專案的名稱,並選擇一種構建的方式,此時我們選擇第一個,構建一個自由風格的軟體專案,然後點選“OK”按鈕建立任務,並進行詳細的配置

然後就會進行到下面這個配置頁面

接下來,我從General、原始碼管理、構建觸發器、構建環境、構建、構建後操作這幾個部分來進行詳細配置說明

4.2.2 General

    這部分主要是設定下名稱、工作空間等。

第一步,點選高階按鈕;
第二步,勾選“自定義工作空間”,輸入工作空間路徑;

若是隻有一個專案,也可以直接到“系統管理>系統配置>工作空間目錄”直接修改預設工作空間目錄,如下圖:

 

 4.2.3 原始碼管理

  因為,我們的程式碼是部署在SVN伺服器上的,所以這裡有下面三個步驟來配置jenkins監控SVN伺服器程式碼變化。
第一步,選擇Subversion;
第二步,在Repository URL輸入專案SVN地址;

第三步,在Credentials選擇SVN使用者名稱和賬號,初次會需要點選Add新增,如下。

4.2.4 構建觸發器

指定的專案完成構建後,觸發此專案的構建。

  • Poll SCM:當選擇此選項,您可以指定一個定時作業表示式來定義Jenkins每隔多久檢查一下原始碼 倉庫的變化。如果發現變化,就執行一次構建。例如,表示式中填寫H 2 * * *將使Jenkins每 隔2分                  鍾就檢查一次原始碼倉庫的變化。
  • Build periodically:此選項僅僅通知Jenkins按指定的頻率對專案進行構建,而不管SCM是否有變化。 如果想在這個Job中執行一些測試用例的話,它就很有幫助。

 

4.2.5 構建環境

        略

4.2.6 構建

     這部分主要是配置構建的相關內容,用於定時觸發構建或者手動執行構建的時候,對程式碼檢驗、編譯時進行的操作。構建概念到處可查到,形象來說,構建就是要把程式碼從某個地方拷貝過來,編譯,再拷貝到某個地方去等等操作,當然不僅與此,但是主要用來幹這個。

因為我的專案是用ant指令碼實現的編譯和打包,所以我選擇的是Invoke Ant,Ant Version選擇我Ant配置的那個名字(這裡可以參見3.4.2),注意不要選擇default喔,那個選擇了沒有用。

  • 增加構建步驟:Invoke Ant
  • Targets:(什麼也沒寫,預設執行根目錄下的build.xml)

如果你的構建指令碼build.xml不在workspace根目錄、或者說你的構建指令碼不叫build.xml。那麼需要在高階裡設定Build File選項的路

build.xml配置檔案請檢視附件“build.xml說明”,裡面有每句配置說明;

checkstyleBuild.xml配置檔案請檢視附件“checkstyleBuild.xml說明”,裡面有每句配置說明;

findBugsBuild.xml配置檔案請檢視附件“findBugsBuild.xml說明”,裡面有每句配置說明。

4.2.7 構建後操作

  用於定義當前專案構建完之後的一些操作,比如構建完之後將checkstyle結果輸出到指定日誌檔案,重新發布專案,去執行其他專案構建等。

4

4.2.7.1 構建後釋出專案

           注意,首先你必須安裝好Deploy Plugin外掛,然後在tomcat的conf目錄配置tomcat-users.xml檔案,如我這裡配置的是manager, 在<tomcat-users>節點裡新增如下內容:


配置完之後一次war包路徑、使用者名稱、密碼、主機即可

      配置完之後一次war包路徑、使用者名稱、密碼、主機即可

      引數說明:

  • WAR/EAR files:war檔案的存放位置,如:**/build/warDest/ad-gx-admin.war。
  • Context path:訪問時需要輸入的內容,如ad-gx-admin訪問時如下:     http://172.16.4.166:10001/ ofCard/ad-gx-admin如果為空,預設是war包的名字。
  • Container:選擇你的web容器,如tomca 7.x
  • Manager user name:填入tomcat-users.xml配置的username內容
  • Manager password:填入tomcat-users.xml配置的password內容
  • Tomcat URL:填入http://192.168.x.x:8080/
  • Deploy on failure:構建失敗依然部署,一般不選擇

   注意:雖然這種部署方法可能會導致tomcat載入時出現卡死的現象。但是也是最簡單的部署方式。如果卡死了重啟下就好了,將tomcat的java記憶體引數調高可以解決這個問題。

最後不要忘記點選儲存喔。

好了!到此一個專案的獲取原始碼,打包,遠端部署

4.2.7.2構建後釋出靜態結果

  輸入配置檔案

checkstyle-result.xml配置檔案請檢視附件“checkstyle-result.xml說明”,裡面有配置說明。

所有這些配置多做完之後,在最下方點選“儲存”按鈕,現在回到首頁去進行構建吧!!!

 

4.3 監控

4.3.1 主頁面介紹

 

1、左邊選單欄

  • 新建:這裡進入新建專案。
  • 使用者:使用者管理模組,對監控系統使用者的增刪改查。
  • 任務歷史:以往構建過的專案。
  • 系統管理:進去是一些配置方面的東西,進入之後幾個主要的子選單分別是系統設定 、Global Tool    Configuration 、管理外掛 幾個模組
  • My Views:當前監控的專案列表。
  • Credentials:新增監控原始碼的的證書,其實就是SVN使用者名稱和密碼驗證。

 

2、監控專案列表

 這裡主要是Jenkins當前正在監控的專案列表。點選進去可檢視當前專案詳細情況。

 

模組1:

  • 狀態:最後一次構建的狀態;
  • 修改記錄:程式碼修改記錄;
  • 工作空間:編譯後代碼存放的目錄;
  • 立即構建:單擊此處,可立即進行構建;
  • 刪除Project:單擊此處,可刪除該專案;
  • 配置:配置該專案相關監控資訊(工作空間、chestyle規則等);
  • Checkstyle Warnings:當前這次構建發現的靜態警告;
  • FindBugs Warnings:當前這次構建發現的FindBugs。

模組2:

  • 這裡顯示的最近一次構建的相關資訊,是否構建成功、構建用時等

模組3:

  • Checkstyle Trend:歷史構建完之後的解決的程式碼中靜態警告走勢;
  • FindBus Trend:歷史構建完之後的解決的程式碼中FindBugs走勢。

4.3.2 構建狀態查詢

 當任務一旦執行,您將會看到這個任務正在佇列中的儀表板和當前工作主頁上執行。這兩種顯示如下。

 

一旦構建完成後,完成後的任務將會構建歷史列表顯示。

當然你可以在Jenkins的主控制面板上看到它,如下圖。

 

在上面展示的截圖中,您將注意到有兩個圖示描述當前作業的狀態。S欄目代表著“最新構建狀態”,W欄目代表著“構建穩定性”。Jenkins使用這兩個概念來介紹一個作業的總體狀況:

1構建狀態:

        下圖中分級符號概述了一個Job新近一次構建會產生的四種可能的狀態: 

  • Successful:完成構建,且被認為是穩定的。
  • Unstable:完成構建,但被認為不穩定。
  • Failed:構建失敗。
  • Disabled:構建已禁用。

2構建穩定性:

        當一個Job中構建已完成並生成了一個未釋出的目標構件,如果您準備評估此次構建的穩定性,Jenkins會基於一些後處理器任務為構建釋出一個穩健指數 (從0-100 ),這些任務一般以外掛的方式實現。它們可能包括單元測試(JUnit)、覆蓋率(Cobertura )和靜態程式碼分析(FindBugs)。分數越高,表明構建越穩定。下圖中分級符號概述了穩定性的評分範圍。任何構建作業的狀態(總分100)低於80分就是不穩定的。

當前作業主頁上還包含了一些有趣的條目。左側欄的連結主要控制Job的配置、刪除作業、構建作業。右邊部分的連結指向最新的專案報告和構件。

通過點選構建歷史(Build History)中某個具體的構建連結,就能跳轉到Jenkins為這個構建例項而建立的構建主頁上。如下圖:

 如果你想通過檢視輸出介面來監控當前任務的進展情況。你可以單擊Console Output(控制檯輸出)。如

 果工作已完成,這將顯示構建指令碼產生的靜態輸出;如果作業仍然在執行中,Jenkins將不斷重新整理網頁的內容,以便您可以看到它執行時的輸出。如下圖:

 

五、常見錯誤處理

5.1 java.lang.UnsupportedClassVersionError

這是因為jenkins和jdk版本不對應引起的。我這裡用的是jdk1.7,所以下載版本http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm(jenkins下載地址:http://pkg.jenkins-ci.org/redhat/),   原先現在2.5版本以上,版本太高,啟動報“java.lang.UnsupportedClassVersionError”錯,所以要解除安裝之前安裝的jenkins-2.54-1.1.noarch,使用如下命令

5.2 command execution failed.Maybe you need to configure the job to choose one of your Ant installations?

控制檯輸出

Started by user admin

[EnvInject] - Loading node environment variables.

Building in workspace /home/jenkins/workspace/My_cache

Updating https://ip地址/svn/iptv/新業務/廣西開機廣告/code/ad-gx-cache at revision '2017-07-17T14:14:11.377 +0800'

Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’

At revision 68144

No changes for https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache since the previous build

[workspace] $ ant -file checkstyleBuild.xml -DBUILD_NUMBER=8

ERROR: command execution failed.Maybe you need to configure the job to choose one of your Ant installations?

[CHECKSTYLE] Skipping publisher since build result is FAILURE

[FINDBUGS] Skipping publisher since build result is FAILURE

 

Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered

Finished: FAILURE

  這是由於沒有成功全域性配置ant的環境變數沒有配置成功導致,請確保環境Ant環境變數配置成功,並且在Global Tool Configuration正確添加了Ant的路徑,這個可以參見2.2及3.4.2

5.3 JAVA_HOME is not defined correctly.

控制檯輸出

Started by user admin

[EnvInject] - Loading node environment variables.

Building in workspace /home/jenkins/workspace/My_cache

Updating https://ip地址/svn/iptv/新業務/廣西開機廣告/code/ad-gx-cache at revision '2017-07-17T15:33:26.714 +0800'

Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’

At revision 68151

[workspace] $ /home/lutong/apache-ant-1.9.9/bin/ant -file checkstyleBuild.xml -DBUILD_NUMBER=11

Error: JAVA_HOME is not defined correctly.

  We cannot execute java

Build step 'Invoke Ant' marked build as failure

[CHECKSTYLE] Skipping publisher since build result is FAILURE

[FINDBUGS] Skipping publisher since build result is FAILURE

Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered

Finished: FAILURE

 這是由於沒有成功全域性配置JDK的環境變數沒有配置成功導致,請確保環境Ant環境變數配置成功,並且在Global Tool Configuration新增的JDK路徑正確,這個可以參見2.4.1及3.4.3

5.3 Unable to access the repository 

在配置“原始碼管理”時,如果Credentials 不選擇或者選擇了驗證不正確,會出現這個錯誤,請參見3.4.4及4.2.3

5.4 cant create file

Checking out https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache at revision '2017-07-17T17:46:17.618 +0800'

Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’

ERROR: Failed to check out https://ip地址/svn/iptv/新業務/廣西開機廣告/code/ad-gx-cache

org.tmatesoft.svn.core.SVNException: svn: E204899: Cannot create new file '/home/jenkins/workspace/廣西開機廣告/.svn/lock': 許可權不夠

No changes for https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache since the previous build

  這是由於 專案“廣西開機廣告”目錄的許可權不夠,使用“chmod777 /home/jenkins/workspace/廣西開機廣告 ”即可

 

附件:

附件一:build.xml說明

複製程式碼
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!-- 指明xml版本,編碼格式為UTF-8 -->
<!-- basedir故名思意就是工作的根目錄 .代表當前目錄。default代表預設要做的事情。 -->
<project basedir="." default="war" name="ad-gx-admin">
    <!--
property類似定義程式中的變數,name是變數名,value是變數值,在下文中可以通過${src}和${webroot}取得變
量的值 -->
    <property name="src" value="src" />
    <property name="webroot" value="WebContent" />
    <property name="lib" value="${webroot}/WEB-INF/lib" />
    <property name="classes" value="build/classes" />
    <property name="warDest" value="build/warDest" />
    <property name="Bulid_Number" value="warDest" />
    <!-- target,即一個任務,它有一個名字,depends是它所依賴的target,
在執行這個targe,例如這裡的init之前ant會先檢查clean是否曾經被執行過,
如果執行過則直接直接執行init,如果沒有則會先執行它依賴的target -->
    <target name="init" depends="clean">
        <!-- 建立編譯後文件存放目錄、war包存放目錄 -->
        <mkdir dir="${classes}" />
        <mkdir dir="${warDest}" />
        <!-- 指定jar包的目錄,下面直接通過${classpath}可以取得jar路徑 -->
        <path id="classpath">
            <fileset dir="${lib}">
                <include name="**/*.jar" />
            </fileset>
        </path>
        <!-- 該任務主要用來對檔案和目錄的複製功能,即將./${src}和./${webroot}目錄下
include指定的檔案拷貝到./${classes}目錄下。額外說明:exclude表示排除的檔案 -->
        <copy todir="./${classes}">
            <fileset dir="./${src}">
                <include name="**/*.properties" />
                <include name="**/*.xml" />
                <include name="**/*.dtd" />
                <include name="**/*.json" />
                <include name="**/*.vm" />
            </fileset>
            <fileset dir="./${webroot}">
                <include name="resource/" />
            </fileset>
        </copy>
    </target>
    <target name="clean">
        <!-- 該任務的作用是根據日誌或監控器的級別輸出資訊。它包括message、file、append和level四個屬性 -
->
<echo >${warDest}</echo>
<!== 對檔案或目錄進行刪除,這裡是刪除${warDest}和${classes}目錄 -->
        <delete dir="${warDest}" />
        <delete dir="${classes}" />
    </target>
    <target name="complie" depends="init">
        <!-- 編譯:將srcdir目錄的原始碼,編譯後放到destdir目錄下,refid表示關聯的jar包 -->
        <javac srcdir="${src}" destdir="${classes}" debug="true" debuglevel="lines,vars,source" encoding="UTF-8">
            <classpath refid="classpath" />
        </javac>
    </target>
    <target name="war" depends="complie">
        <war warfile="${warDest}/ad-gx-admin.war" webxml="${webroot}/WEB-INF/web.xml">
            <lib dir="${lib}" />
            <classes dir="${classes}" />
            <fileset dir="./${webroot}">
                <include name="**/**" />
                <exclude name="META-INF/**" />
                <exclude name="WEB-INF/classes/**" />
                <exclude name="WEB-INF/lib/**" />
            </fileset>
        </war>
    </target>
</project>
複製程式碼 View Code

 附件二:checkstyle-result.xml說明

複製程式碼
<?xml version="1.0" encoding="utf-8"?>
<project name="checkstyle" default="checkstyle" basedir=".">
    <!-- 檢查原始碼的路徑 -->
    <target name="init">
        <tstamp />
        <!-- 輸出報告的路徑  -->
        <property name="project.dir" value="/home/jenkins/workspace/廣西開機廣告專案/checkstyle_report" />
        <property name="project.checkstyle.report.dir" value="${project.dir}/${BUILD_NUMBER}" />
        <property name="project.checkstyle.result.name" value="checkstyle-result.xml" />
        <property name="project.checkstyle.report.name" value="checkstyle-report.html" />
        <!-- 檢測規則存放路徑  -->
        <property name="checkstyle.config" value="/home/jenkins/workspace/checkstyle.xml" />
        <property name="checkstyle.report.style" value="/var/lib/jenkins/plugins/checkstyle/WEB-INF/lib/checkstyle-frames.xsl" />
        <property name="checkstyle.result" value="${project.checkstyle.report.dir}/${project.checkstyle.result.name}" />
        <property name="checkstyle.report" value="${project.checkstyle.report.dir}/${project.checkstyle.report.name}" />
        <mkdir dir="${project.checkstyle.report.dir}" />
    </target>
    <taskdef resource="checkstyletask.properties" classpath="/var/lib/jenkins/plugins/checkstyle/WEB-INF/lib/checkstyle-6.5-all.jar" />
    <target name="checkstyle" depends="init" description="check java code and report.">
        <checkstyle config="${checkstyle.config}" failureProperty="checkstyle.failure" failOnViolation="false">
            <formatter type="xml" tofile="${checkstyle.result}" />
            <fileset dir="/home/jenkins/workspace/廣西開機廣告專案" includes="**/*.java" />
            <!-- 檢查原始碼的存放路徑 -->
        </checkstyle>
        <!--<style in="${checkstyle.result}" out="${checkstyle.report}" style="${checkstyle.report.style}" />
         通過指定的xsl模版檔案生成一份html的報告,這裡生成的檔案用於郵件傳送時附加上,另外Jenkins外掛也會生成視覺化的結果  -->
    </target>
    <target name="xml2html" depends="checkstyle">
        <!-- 將生產結果根據擴充套件樣式表文件checkstyle-frames.xsl生成html頁面,輸出到html -->
        <xslt in="${checkstyle.result}" out="${checkstyle.report}" style="${checkstyle.report.style}"></xslt>
    </target>
</project>
複製程式碼 View Code 每一個你不滿意的當下,都有一個你不曾努力的過去

 

一、jenkins 介紹

  •   它是一個自動化的週期性的整合測試過程,從檢出程式碼、編譯構建、執行測試、結果記錄、測試統計等都是自動完成的,無需人工干預,有利於減少重複過程以節省時間、費用和工作量;
  • 它需要有專門的整合伺服器來執行整合構建;
  • 它需要有程式碼託管工具支援,比如SVN;
  • Jenkins的主要目標是監控軟體開發流程,快速顯示問題;
  • jenkins持續整合中的任何一個環節都是自動完成的,無需太多的人工干預,所以它有利於減少重複過程以節省時間、費用和工作量。

  

二、下載安裝啟動

本文介紹的是在CentOS系統下,用rpm包安裝方式進行啟動

2.1 安裝準備

軟體

版本

說明

JDK

1.7.0_76

解壓安裝,注意設定好環境變數

ant

1.9.9

JDK1.7.x只能安裝1.9.x系列ant

Jenkins

2.33

JDK1.7.x只能安裝Jenkins2.3.x系列Jenkins

2.2 安裝ant

ant是基於java的一款構建工具,通過配置build.xml,讓專案可以進行編譯,部署,打包。

因為我們要實現自動構建,所以首先要安裝ant。

  • http://ant.apache.org 上下載tar.gzant

  • wget http://www-eu.apache.org/dist//ant/binaries/apache-ant-1.9.9-bin.tar.gz

  • 解壓tar包

  • tar -zxvf apache-ant-1.9.9-bin.tar.gz

  • 移動到/usr/share

  • cp -r apache-ant-1.9.9 /usr/share

  • 切換到/usr/share目錄下,重新命名

  • cd /usr/share

  • mv apache-ant-1.9.9 ant

  • 配置環境變數

  • vi /etc/profile

#set Ant enviroment

export ANT_HOME=/usr/share/ant

export PATH=PATHPATH: ANT_HOME/bin

  • 立刻將配置生效

  • source /etc/proifle

  • 測試ant是否生效

  • ant -version

出現如下提示便表示安裝成功。

ant的使用檢視這篇文章:ant在持續整合的應用

2.3 解除安裝及安裝jenkins

2.3.1 解除安裝原來安裝的rpm包

  首先檢視是否已經安裝過jenkins
rpm -qa|grep jenkins
   我這裡用的是jdk1.7,所以下載版本 http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm(jenkins下載地址:http://pkg.jenkins-ci.org/redhat/),    原先現在2.5版本以上,版本太高,啟動報“java.lang.UnsupportedClassVersionError”錯,所以要解除安裝之前安裝的jenkins-2.54-1.1.noarch,使用如下命令
# 解除安裝原先高版本的jenkins
rpm -e nodeps jenkins-2.54-1.1.noarch

2.3.2 安裝jenkins

# 下載jenkins-2.33-1.1.noarch.rpm
wget http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm
#安裝jenkins-2.33-1.1.noarch.rpm
sudo rpm -ih jenkins-2.33-1.1.noarch.rpm

出現如下圖

表示安裝成功,安裝成功會自動生成下面檔案: 

/usr/lib/jenkins/jenkins.war            #WAR包 
/etc/sysconfig/jenkins                  #配置檔案
/var/lib/jenkins/                       #預設的JENKINS_HOME目錄
/var/log/jenkins/jenkins.log            #Jenkins日誌檔案

2.4 啟動

啟動用如下命令:

sudo service jenkins start

 報瞭如下錯誤:

會報這個錯誤,這是由於沒有配置java環境,有兩種方法可以解決:

2.4.1 安裝jdk環境

  先檢查一下java虛擬機器有沒有安裝,如果沒有就安裝

java --version

2.4.2 在jenkins配置檔案中配置

  需要“vi /etc/init.d/jenkins”,把jdk路徑加上,如下:

複製程式碼
# Search usable Java as /usr/bin/java might not point to minimal version required by Jenkins.
# see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
/home/lutong/soft/jdk1.7.0_76/bin/java
"
for candidate in $candidates
do
  [ -x "$JENKINS_JAVA_CMD" ] && break
  JENKINS_JAVA_CMD="$candidate"
done

JAVA_CMD="$JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -DJENKINS_HOME=$JENKINS_HOME -jar $JENKINS_WAR"
PARAMS="--logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon"
複製程式碼

上述配置檔案中紅色加粗字型的內容是我配置自己的jdk路徑。由於我的系統中的java是自己解壓安裝的,所以我採用了第二種方式

再次啟動jenkins:

 

三、預設配置修改及初始化

3.1 修改配置檔案

上面我們有提到配置檔案是/etc/sysconfig/jenkins,修改如下兩項配置(根據實際需要設定)

#修改為18080,預設是8080
JENKINS_PORT="18080"
#記憶體設定,我這裡設定成如下配置
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=1024m"

3.2 初始化

  • 在瀏覽器中輸入172.16.7.109:8080/jenkins(預設是使用8080埠)

開啟jenkins的後臺控制頁面

初始化成功後會自動生成一個管理員密碼放到指定位置,根據頁面提示覆制密碼貼上到輸入框就可以登入了


3.3 初始化安裝外掛

  • 登入成功後回讓你選擇外掛的安裝,可以選擇建議的安裝也可以自己進行選擇,不清楚的話可以使用建議的安裝

    由於建議安裝的外掛比較多,安裝的過程有點慢,多等待一會

  • 由於建議安裝的外掛比較多,安裝的過程有點慢,多等待一會

  •  

  • 安裝的過程也可能因為網路等一些原因安裝會失敗,現在可以無視它,點選Continue,後面再進行手動的安裝


  • 安裝完成
  • 安裝完成後最好新建立一個管理員賬戶代替之前的臨時自動生成的密碼賬戶
  • 建立新的管理員賬戶
  • 初始化完成,進入後臺管理介面

     


    初始化完成

    後臺管理介面

    3.4 初始化配置

    3.4.1 修改工作空間