一、jenkins 介紹
- 它是一個自動化的周期性的集成測試過程,從檢出代碼、編譯構建、運行測試、結果記錄、測試統計等都是自動完成的,無需人工干預,有利於減少重復過程以節省時間、費用和工作量;
- 它需要有專門的集成服務器來執行集成構建;
- 它需要有代碼托管工具支持,比如SVN;
- 官網地址地址:https://jenkins.io
- 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.gz版ant
-
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=$PATH:$ANT_HOME/bin
-
立刻將配置生效
-
source /etc/proifle
-
測試ant是否生效
-
ant -version
出現如下提示便表示安裝成功。
ant的使用查看這篇文章:ant在持續集成的應用
2.3 卸載及安裝jenkins
2.3.1 卸載原來安裝的rpm包
rpm -qa|grep jenkins
# 卸載原先高版本的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包路徑、用戶名、密碼、主機即可
參數說明:
- l WAR/EAR files:war文件的存放位置,如:**/build/warDest/ad-gx-admin.war。
- l Context path:訪問時需要輸入的內容,如ad-gx-admin訪問時如下: http://172.16.4.166:10001/ ofCard/ad-gx-admin如果為空,默認是war包的名字。
- l Container:選擇你的web容器,如tomca 7.x
- l Manager user name:填入tomcat-users.xml配置的username內容
- l Manager password:填入tomcat-users.xml配置的password內容
- l Tomcat URL:填入http://192.168.x.x:8080/
- l Deploy on failure:構建失敗依然部署,一般不選擇
注意:雖然這種部署方法可能會導致tomcat加載時出現卡死的現象。但是也是最簡單的部署方式。如果卡死了重啟下就好了,將tomcat的java內存參數調高可以解決這個問題。
最后不要忘記點擊保存喔。
好了!到此一個項目的獲取源碼,打包,遠程部署
4.2.7.2構建后發布靜態結果
輸入配置文件
checkstyle-result.xml配置文件請查看附件“checkstyle-result.xml說明”,里面有配置說明。
所有這些配置多做完之后,在最下方點擊“保存”按鈕,現在回到首頁去進行構建吧!!!
4.3 監控
4.3.1 主頁面介紹
1、左邊菜單欄
- l 新建:這里進入新建項目。
- l 用戶:用戶管理模塊,對監控系統用戶的增刪改查。
- l 任務歷史:以往構建過的項目。
- l 系統管理:進去是一些配置方面的東西,進入之后幾個主要的子菜單分別是系統設置 、Global Tool Configuration 、管理插件 幾個模塊
- l My Views:當前監控的項目列表。
- l Credentials:添加監控源碼的的證書,其實就是SVN用戶名和密碼驗證。
2、監控項目列表
這里主要是Jenkins當前正在監控的項目列表。點擊進去可查看當前項目詳細情況。
模塊1:
- l 狀態:最后一次構建的狀態;
- l 修改記錄:代碼修改記錄;
- l 工作空間:編譯后代碼存放的目錄;
- l 立即構建:單擊此處,可立即進行構建;
- l 刪除Project:單擊此處,可刪除該項目;
- l 配置:配置該項目相關監控信息(工作空間、chestyle規則等);
- l Checkstyle Warnings:當前這次構建發現的靜態警告;
- l FindBugs Warnings:當前這次構建發現的FindBugs。
模塊2:
- 這里顯示的最近一次構建的相關信息,是否構建成功、構建用時等。
模塊3:
- l Checkstyle Trend:歷史構建完之后的解決的代碼中靜態警告走勢;
- l 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 can’t 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>
附件二: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>