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 獲取原始碼

相關文章