代码自动审查实践:基于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
xxxxxxxxxxecho ${gitlabSourceBranch}git checkout ${gitlabSourceBranch}git merge origin/${gitlabSourceBranch}rm -f inject.props || trueecho 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
xxxxxxxxxxsonar.projectKey=erpsonar.sources=.sonar.host.url= <<sonar网址>>sonar.login=<<sonar token>>sonar.language=pysonar.gitlab.api_version=v4sonar.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=truesonar.gitlab.merge_request_discussion=truesonar.gitlab.user_token=<<gitlab user token>>sonar.gitlab.url=<<gitlab网址>>sonar.issuesReport.console.enable=truesonar.issuesReport.html.enable=falsesonar.gitlab.comment_no_issue=falsesonar.gitlab.query_max_retry=500sonar.gitlab.query_wait=10000sonar.scm.provider=gitsonar.gitlab.all_issues=falsesonar.python.pylint=/usr/local/bin/pylintsonar.python.pylint_config=/var/jenkins_home/sona/conf/pylint.rcsonar.python.pylint.reportPath=./pylint-report.txtsonar.gitlab.only_issue_from_commit_line=falsesonar.gitlab.disable_global_comment=true
添加gitlab webhook
