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的指示即可,这里主要讲几点相对重要的问题

  1. deadline gometalinter的执行会有时间限制,时间一到即停止,可以使用--deadline=5m 指定m表示分钟,s表示秒)
  2. 去掉某种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的输出报告。

posted @ 2018-11-09 22:25  不懂就装懂  阅读(1492)  评论(0编辑  收藏  举报