代码自动审查实践:基于sonar+jenkins+gitlab
前言
目标
要实现的效果是,开发人员在gitlab提交Merge Request
后,自动触发jenkins的sonar分析任务,若分析到了问题代码,则自动在问题代码下面发表一条comment,并且钉钉提醒。
效果图如下:
gitlab上自动写入评论
触发钉钉提醒
sonar dashboard视图
sonar issues视图
运行机制图
搭建步骤
生成gitlab user token
生成并保存user token
安装SonarQube
具体安装方式不再赘述,可以自行参考官方安装文档https://docs.sonarqube.org/latest/setup/install-server/,个人推荐使用docker方式安装,更加方便。
安装gitlab-sonar插件
请参考https://github.com/gabrie-allaigre/sonar-gitlab-plugin
配置sonar
新建一个sonar项目
生成sonar token,并记录这个token
填入gitlab user token
配置jenkins
配置源码git地址
构建触发器
执行shell
xxxxxxxxxx
echo ${gitlabSourceBranch}
git checkout ${gitlabSourceBranch}
git merge origin/${gitlabSourceBranch}
rm -f inject.props || true
echo commit_shas=$(git log --pretty=format:%H origin/${gitlabTargetBranch}..$gitlabMergeRequestLastCommit | tr '\n' ',') > inject.props
/usr/local/bin/pylint --rcfile=/var/jenkins_home/sona/conf/pylint.rc $(find ./ -iname "*.py" -print) -r n --msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" > ./pylint-report.txt || true
插入环境变量
执行SonarQube Scanner
xxxxxxxxxx
sonar.projectKey=erp
sonar.sources=.
sonar.host.url= <<sonar网址>>
sonar.login=<<sonar token>>
sonar.language=py
sonar.gitlab.api_version=v4
sonar.gitlab.ref_name=${gitlabSourceBranch}
sonar.gitlab.project_id= ${gitlabMergeRequestTargetProjectId}
sonar.gitlab.commit_sha=${commit_shas}
sonar.gitlab.ci_merge_request_iid=${gitlabMergeRequestIid}
sonar.gitlab.unique_issue_per_inline=true
sonar.gitlab.merge_request_discussion=true
sonar.gitlab.user_token=<<gitlab user token>>
sonar.gitlab.url=<<gitlab网址>>
sonar.issuesReport.console.enable=true
sonar.issuesReport.html.enable=false
sonar.gitlab.comment_no_issue=false
sonar.gitlab.query_max_retry=500
sonar.gitlab.query_wait=10000
sonar.scm.provider=git
sonar.gitlab.all_issues=false
sonar.python.pylint=/usr/local/bin/pylint
sonar.python.pylint_config=/var/jenkins_home/sona/conf/pylint.rc
sonar.python.pylint.reportPath=./pylint-report.txt
sonar.gitlab.only_issue_from_commit_line=false
sonar.gitlab.disable_global_comment=true
添加gitlab webhook