gitlab+reviewdog+golangci-lint实现提交MR时进行代码检测
gitlab+reviewdog+golangci-lint实现提交MR时进行代码检测
ivansli本文使用 shell
作为 gitlab-runner 执行器 (executor) 演示提交 MR 时执行代码检查。
gitlab搭建参考文章:<基于docker搭建的gitlab实现CI/CD>,本文只是把文章中 runner 执行器由 docker 变成了 shell。
1.准备工作
安装gitlab-runner、reviewdog、golangci-lint
1
2
3
4
5
6安装 gitlab-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
安装 reviewdog
curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s
安装 golangci-lint
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.46.2gitlab-runner 注册到 gitlab
1
2
3
4
5
6
7
8
9
10
11sudo gitlab-runner register \
--non-interactive \
--executor "shell" \
--docker-image alpine:latest \
--url "http://101.132.194.252/" \
--registration-token "GR1348941ZCPzw2JGx4ubLcwn25dy" \
--description "register-runner" \
--tag-list "shell-runner" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"参数说明:
- –executor runner执行器类型为shell
- –url gitlab地址
- –registration-token register需要的token(由gitlab提供)
- –tag-list 当前 runner 的tag列表,job 通过 tags 来指定执行的runner
2.gitlab 代码仓库
1 | . |
文件说明:
- .gitlab-ci.yml gitlab执行CI/CD时需要的配置文件
- .reviewdog.yml reviewdog需要的配置文件
.gitlab-ci.yml
1 | stages: |
.reviewdog.yml
1 | runner: |
main.go
1 | package main |
3.提交MR,执行 go lint
提交MR时,gitlab执行对应job,在runner中使用golangci-lint做代码检查。
可以看出,代码检查的结果显示有两处错误。
1 | main.go:10:6: [golint] num declared but not used (typecheck) |
同时会把这些问题作为 comment 提交到 MR 中。
4.一些问题及解决方法
问题1. reviewdog: golint failed with zero findings
1 | reviewdog: golint failed with zero findings: The command itself failed (exit status 127) or reviewdog cannot parse the results |
此问题,需要检查 golangci-lint 是否正确安装,并且该命令是否存在于 PATH 路径。
问题2. reviewdog: GET 404
1 | reviewdog: GET http://101.132.194.252/api/v4/projects/root/cicd-test/merge_requests/13: 404 {message: 404 Project Not Found} |
此问题,需要检查 root/cicd-test
是否正确,即:是否是存在的仓库路径。
问题3. reviewdog: command not found
1 | bash: line 128: reviewdog: command not found |
此问题,需要检查 reviewdog 是否正确安装,并且该命令是否存在于 PATH 路径。