Jenkins+mvn+cobertura覆蓋率報告並由jenkins匯出
這東西辣雞葫蘆娃折騰了一天多,茶不思飯不想,終於能夠跑起來了,從此省去了手動部署專案的煩惱233。在這裡把踩過的一堆坑分享一下,希望能幫助到其他小夥伴。
專案配置:
mvn對專案結構有一些約束,比如約定原始碼放在src/main/java 測試程式碼放在src/test/java,如果你的專案是按照此種方式結構,那是極好的,如果不是,原始碼和測試程式碼路徑可以再pom.xml中顯式指明。
注:如果在編譯過程出現無法找到org.junit.jar,可以把junit.jar新增到jdk中解決,具體位置為:jdk/jre/lib/ext,其他所有的jar包依賴問題都可以如此解決。好處在於:配置伺服器資源時,可能會跑很多個java專案,他們有一些共同的依賴,比如junit、jdbc connector等,適當擴充套件以下jdk就不需要給每個專案單獨加依賴了。缺點在於:專案部署和具體伺服器有關,放到另外的沒擴充套件過jdk的伺服器上可能會無法執行。
在專案根目錄下建立一個pom.xml,內容為:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--以上是此mvn指令碼版本資訊,複製黏貼即可--> <!--以下為專案基本資訊,對構建過程無影響--> <groupId>com.calabash_boy</groupId> <artifactId>myapp</artifactId> <version>1.0.0</version> <!--以上為專案基本資訊,對構建過程無影響--> <!--以下為編譯原始碼+編譯測試程式碼+執行測試程式碼--> <build> <!--指定編譯的jdk版本為jdk8--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>8</source> <target>8</target> </configuration> <!--新增junit依賴--> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </plugin> </plugins> <!--原始碼路徑--> <sourceDirectory>src/main</sourceDirectory> <!--原始碼編譯輸出路徑--> <outputDirectory>web/classes/main</outputDirectory> <!--測試程式碼輸出路徑--> <testOutputDirectory>web/classes/test</testOutputDirectory> <!--測試程式碼路徑--> <testSourceDirectory>src/test</testSourceDirectory> <!--編譯原始碼的資原始檔,比如第三方jar包--> <resources> <resource> <targetPath>web/lib</targetPath> <directory>web/lib</directory> </resource> </resources> <!--編譯測試程式碼的資原始檔,比如第三方jar包--> <testResources> <testResource> <targetPath>web/lib</targetPath> <directory>web/lib</directory> </testResource> </testResources> </build> <!--以上為編譯原始碼+編譯測試程式碼+執行測試程式碼--> <!--以下配置cobertura生成測試報告+測試覆蓋率報告--> <profiles> <profile> <id>jenkins</id> <activation> <property> <name>env.BUILD_NUMBER</name> </property> </activation> <!--上面一小段複製黏貼即可--> <build> <plugins> <plugin> <!-- 以下為cobertura外掛資訊,複製黏貼即可--> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.7</version> <!-- 以上為cobertura外掛資訊--> <!-- 以下為jenkins匯出xml報告用,複製黏貼即可--> <configuration> <formats> <format>xml</format> </formats> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>cobertura</goal> </goals> </execution> </executions> <!-- 以上為jenkins匯出xml報告用>--> </plugin> </plugins> </build> </profile> </profiles> </project>
jenkins配置:
1、安裝cobertura外掛,直接到系統管理-外掛管理-可選外掛中選擇cobertura下載安裝。
2、通過shell呼叫mvn命令生成cobertura測試報告,先cd到pom.xml所在目錄,然後執行mvn clean cobertura:cobertura package。我個人不推薦新手使用ANT指令碼方式,因為ANT指令碼配置cobertura有點繁瑣,而mvn好處在於你不用去了解cobertura先編譯,然後修改位元組碼生成ser,然後跑測試這麼多細節,且mvn的pom.xml比ANT的build.xml好寫很多。
3、構建後操作選擇Publish Cobertura Coverage Report,路徑選擇coverage.xml所在目錄,一般為專案根目錄/target/site/cobertura/coverage.xml
4、最終效果