2020年1月27日 星期一

從Java到Go系列 - Jenkins Code coverage


歡迎來到從 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




沒有留言 :