歡迎來到從 Java 到 Go 系列(確定會有系列嗎...),本篇文章想要解決的問題是:
如何讓 Jenkins 顯示 Code coverage?
而會問這個問題的人通常都是來自於 Java 的開發世界,為什麼呢?
根據我的觀察,對於許多原生的 Gopher,他們反而會選擇 Gitlab-CI or Drone 這種輕量級的工具,反而比較不會選擇 Jenkins 老公公,可能原因:
- Go 的好處就是輕盈,既然要輕盈,就輕到底,也選擇其他輕盈的框架(好啦,這是我的主觀想法,歡迎提供其他看法)
- 反正code 就放在 Gitlab,那可以直接用整在一起的Gitlab CI 不是更佳省事
- Jenkins 的生態系的確比較多 Java 的 plugin(因為他就是由Java 寫的咩...)
此外 Go 本來就內建有產生 Code coverage 的報告,內容如下:
而回到 Jenkins,Jenkins 主要支援的 Code coverage 格式有兩種:
所以順著這個脈絡,要不就是找到可以讀 Go coverage 格式的 Jenkins plugin,再不然就是把 Go 的 Code coverage 格式轉成 Jenkins 支援的格式,比如說 Cobertura。
很不幸的,第一條路行不通,並沒有找到可以讀 Go coverage 格是的 plugin,不過我倒是找到了了一個 tool 可以輸出格式成為 XML(Cobertura格式):
https://github.com/t-yuki/gocover-cobertura
使用方法也很簡單,我只要寫一個簡單的 script 執行,產生 coverage.xml 就可以讓 Jenkins 使用。
#!/usr/bin/env bash # prepare PATH, GOROOT and GOPATHexport GO111MODULE=on export PATH=$(go env GOPATH)/bin:${PATH} echo "${PATH}"go get github.com/t-yuki/gocover-cobertura echo "Start create coverage report...."gocover-cobertura < tmp/coverage.txt > tmp/coverage.xml
最後只要在 Jenkins 的 Post build 階段增加 Public Cobertura Coverage report ,並且選擇我們輸出的目錄: tmp/coverage.xml
最後就可以產出我們熟悉的 Jenkins coverage report
沒有留言 :
張貼留言