golang静态代码扫描:gometalinter
gometalinter是一个go语言linter工具集,通过静态代码扫描,能够找出代码中潜在的问题。https://github.com/alecthomas/gometalinter
gometalinter 安 装 :
1)不太推荐的方法:
go get -u github.com/alecthomas/gometalinter
这时,gometalinter会被安装在$GOPATH/bin 下。此时,gometalinter仍未能使用,因为它所依赖的linter工具集并完成安装。使用:
gometalinter --install --update
安装linter工具集。因为GFW的问题,大部分linter工具会安装不上,需要一个一个手动下载安装,比较繁琐,这也是不太推荐这种方法的主要原因
2) 使 用 docker 镜 像 gometalinter已经有人做成了docker镜像,可以pull官方镜像进行使用docker pullcydev/gometalinter
或者私有registry中的镜像(暂不支持registry v1): 绑定host:
registry2.service.mogujie.org 10.13.131.162
myauth.com 10.13.131.162
将docker启动项增加
--insecure-registryregistry2.service.mogujie.org:2980
然后
docker pullregistry2.service.mogujie.org:2980/public/gometalinter 使用时,用-v选项将需要检查的工程目录挂载到/go/src/$your_project下
gometalinter的使用
按--help的指示即可,这里主要讲几点相对重要的问题
- deadline gometalinter的执行会有时间限制,时间一到即停止,可以使用--deadline=5m 指定(m表示分钟,s表示秒)
- 去掉某种linter 并不是所有的linter都是我们需要的,可以用 -D 选项去除,如-D golint 去掉golint检查3.使用--errors只显示error
在CI中使用
我已经在jenkins服务器上pull了gometalinter镜像。在jenkins中执行shell命令docker run -t -v $your_project_path:/go/src/$your_project gometalinter \
/bin/bash -c "cd src/$your_project && gometalinter ./... -D golint -D gotype --errors --deadline=10m"
这里去掉gotype的原因是由于容器中的gopath中缺乏相关的包,gotype会有大量误报,将相关的包也挂载进容器中的gopath中即可使用gotype
。
需要注意的是,在shell命令下,如果gometalinter执行发现错误,则会导致CI失败。查看控制台即可观察gometalinter的输出报告。