Jacoco 與 Jenkins 整合獲取覆蓋率報告

大耳怪怪發表於2020-07-20

1. Jacoco的原理可參考官網或網上其他Jacoco相關的文章

https://www.eclemma.org/jacoco/trunk/doc/index.html

2. Jacoco與Jenkins整合獲取覆蓋率報告的步驟

2.1 服務啟動命令中,加入jacoco的代理引數

如:

[/bin/sh,-c,mkdir /project/jacoco && cd /project/jacoco && wget http://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.5/jacoco-0.8.5.zip -O ./jacoco-0.8.5.zip && unzip jacoco-0.8.5.zip && java -javaagent:/project/jacoco/lib/jacocoagent.jar=dumponexit=true,includes=com.*,output=tcpserver,port=6300,address=0.0.0.0 -jar -Dspring.profiles.active=test /project/start.jar”]
2.2 jenkins目錄下建立build.xml

如:/var/lib/jenkins/workspace/build.xml

<!-- reset="true"是指在dump完成之後,重置jvm中的覆蓋率資料為空。append="true"是指dump出來的exec檔案為增量方式 -->

2.3 jenkins 中建立任務

-- 建立自由風格任務
-- 拉取服務的程式碼

-- 配置mvn命令進行編譯生成class檔案

-- 配置ant命令進行dump拉取覆蓋率資訊

-- 配置jacoco report資訊

以上配置完成後,執行任務,可得到覆蓋率報告,如:

但,仍存在問題:被測服務部署的版本與jenkins拉取的版本不一致時,會導致覆蓋率報告資訊不準確

3. 解決問題:被測服務部署的版本與jenkins拉取的版本不一致

解決方案:為jenkins安裝Dynamic Parameter外掛,動態獲取測服務的分支及commitid,作為變數傳遞給jenkins,從而確保兩邊保持一致
參考:https://blog.csdn.net/A_man_only/article/details/95320389
https://www.jianshu.com/p/dd1b0f5c6a01

Step1:在專案的pom檔案中加入外掛:

<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
</plugin>

驗證:重新部署服務後,通過訪問<專案的訪問url>/actuator/info 得到返回結果,內含分支資訊及提交版本號資訊,如:

{"git":{"commit":{"time":"2020-07-02T09:11:58Z","id":"bdcae43"},"branch":"master"}}

Step2:Jenkins任務中配置動態變數,獲取提交版本號commitId

def response= "curl http://[host]/promotion/actuator/info".execute()
response.waitFor()
def respStr = response.text
def firstIndex = respStr.lastIndexOf("id")+5
def lastIndex = respStr.lastIndexOf("branch")-4
def id=respStr.substring(firstIndex, lastIndex)

Step3:Jenkins任務中,配置使用commitId獲取原始碼

相關文章