1.背景
在《Jenkins系列——使用checkstyle進行代碼規范檢查》一文中完成了ant實現代碼規范檢查的例子。但存在以下缺陷:
- 每個作業都需要配置一個不同的checkstyle ant腳本,而這個腳本中的多數代碼是重復的。
- 報告采取覆蓋方式,而我們有時需要保留一定構建次數的報告。
2.分析
- 使用變量代替ant腳本中變化的路徑,這個變量通過ant命令的 -Dxxx=value 的方式傳值。
- 建立名為${BUILD_NUMBER}的目錄,將該次構建成功的報告保留在該目錄下。
3.環境
同《Jenkins系列——使用checkstyle進行代碼規范檢查》中的環境。
4.驗證
4.1 修改checkstyle的ANT腳本
checkstyle腳本如下:

<?xml version="1.0" encoding="UTF-8"?> <project name="checkstyle" default="checkstyle" basedir="."> <!-- 檢查源碼的路徑 --> <target name="init"> <tstamp/> <!-- 輸出報告的路徑 --> <property name="project.dir" value="${JENKINS_WORKSPACE}\${JOB_NAME}"/> <property name="project.checkstyle.report.dir" value="${project.dir}\checkstyle_report\${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="${CHECKSTYLE_INSTALL}\sun_checks.xml"/> <property name="checkstyle.report.style" value="${CHECKSTYLE_INSTALL}\contrib\checkstyle-author.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="${CHECKSTYLE_INSTALL}\checkstyle-5.7-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="${project.dir}" includes="**/*.java" /> <!-- 檢查源代碼的存放路徑 --> </checkstyle> <!-- 通過指定的xsl模版文件生成一份html的報告,這里生成的文件用於郵件發送時附加上,另外Jenkins插件也會生成可視化的結果 --> <style in="${checkstyle.result}" out="${checkstyle.report}" style="${checkstyle.report.style}" /> </target> </project>
4.2 配置job
新建一個job,取名CheckstyleDemo2_CODE,配置如下:
文字版(便於復制):
Jenkins 配置set ANTFILE_PATH=D:\data\jenkins\etc\checkstyle-build.xml set JENKINS_WORKSPACE=D:\data\jenkins\workspace set CHECKSTYLE_INSTALL=D:\data\jenkins\myConf\checkstyle-5.7 ant -f %ANTFILE_PATH% -DJENKINS_WORKSPACE=%JENKINS_WORKSPACE% -DCHECKSTYLE_INSTALL=%CHECKSTYLE_INSTALL% -DBUILD_NUMBER=%BUILD_NUMBER% -DJOB_NAME=%JOB_NAME%
點擊構建,得到構建成功的結果:
工作區如下:
可見,改造后的checkstyle運行達到了預期效果。
4.3 通過配置另一個job驗證效果(無需改動配置)
新建一個job,取名CheckstyleDemo3_CODE,直接copy CheckstyleDemo2_CODE,僅需改動SVN源碼路徑及訪問該SVN路徑的權限信息。
構建后情況如下:
5.總結
經過以上的改造,checkstyle 的ANT腳本自始至終只有一份,作業中執行代碼規范檢查的命令也相同,大大減輕了手工配置可能帶來的錯誤。