公司后端代码主要是 Go + PHP。我这两天把 Go 项目静态检查的工作搬到 Jenkins 上了,省去了本地 download 项目,整理报告的时间。
实现场景:
-
Jenkins 从 Gitlab 上拉取最新代码
-
编译项目,下载 gometalinter :https://github.com/alecthomas/gometalinter
-
执行 gometalinter 命令,进行源码分析,生成 xml 格式的 checkstyle 报告
-
在 Jenkins 上查看 checkstyle 报告
Go 小白记录一下 Jenkins 配置过程。
第一步:安装 Go 环境插件和 CheckStyle 报告解析插件。
Go 插件源码:https://github.com/jenkinsci/golang-plugin
Go 插件介绍页:https://wiki.jenkins-ci.org/display/JENKINS/Go+Plugin
CheckStyle 插件介绍页:https://wiki.jenkins-ci.org/display/JENKINS/Checkstyle+Plugin
Go 插件安装完成后,要完成某个 Go 版本的安装。需要注意的是:官方介绍是在 Manage Jenkins →Configure System 中配置 Go installations,但实际上是在 GlobalTool Configuration 中配置。
第二步:Go 项目配置如下:
-
Source Code Management - Git :略。
-
Build Environment 中,勾选“Set up Go programming language tools”,选择合适的 Go 版本
-
通过以下 Shell 脚本完成项目构建,gometalinter 下载和执行。需要说明的是,$JENKINS_HOME 是事先在 Jenkins 的 Configure System - Global properties 中配置的变量。而 $GOROOT 是 Go 插件自动完成的变量配置。
# print the env variables
echo $JENKINS_HOME
echo $GOROOT
# prepare the dependencies
mkdir -p $GOROOT/src/git.applewu.com/API/
cp -r $WORKSPACE/vendor/* $GOROOT/src/
ln -Ffs $WORKSPACE $GOROOT/src/git.applewu.com/API/
cd $GOROOT/src/git.applewu.com/API/pingpp-async-service
go install
go get -u gopkg.in/alecthomas/gometalinter.v1
export PATH=$PATH:$JENKINS_HOME/go/bin
gometalinter.v1 --install
gometalinter.v1 --disable-all --enable=interfacer --enable=staticcheck --enable=gas --enable=gocyclo --enable=ineffassign --enable=lll --enable=dupl --enable=deadcode --enable=goimports --enable=unconvert --enable=unused --enable=varcheck --enable=aligncheck --enable=goconst --enable=gosimple --enable=misspell --enable=structcheck --enable=errcheck --enable=gotype --checkstyle >> checkstyle.xml
为了避免第三方包导入的问题,shell 脚本中将 Go 项目的 vendor 目录内容拷贝到 GOROOT 中。并将当前项目作为软链也加入到 GOROOT 中。
- 在 Post-build Actions 中选择“Publish Checkstyle analysis results”配置为:checkstyle.xml
第三步:build 项目,查看结果。以下是 checkstyle 报告效果。