概述
CI流程使用gitlab自带的CI功能,sonarqube与gitlab进行整合。
前提条件
1.sonarqube已经可运行。
可参考
sonarqube+postgres+Gitlab+eclipse+sonarlint
2.Gitlab已经跑通CI功能。
可参考
gitlab runner 的安装和.gitlab.yml文件配置及触发方式
3.Java工程为Maven工程
整合
需要用到的插件sonar-gitlab-plugin
https://github.com/gabrie-allaigre/sonar-gitlab-plugin
sonarqube版本7.6
sonar-gitlab-plugin版本Version 4.1.0-SNAPSHOT
下载后放到sonar服务器
/usr/local/sonarqube-7.6/extensions/plugins 目录下
重启sonarqube生效
这时在sonarqube界面可以看到gitlab的配置信息

user token的获取方式参考
gitlab runner 的安装和.gitlab.yml文件配置及触发方式
然后就可以用gitlab CI的方式进行触发了,主要是配置.gitlab-ci.yml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | stages: - build sonar_preview: stage: build tags: - CQTrunner script: - sh sonar_preview.sh only: - issue1 sonar_analyze: stage: build tags: - CQTrunner script: - sh sonar_analyze.sh only: - develop |
这个文件仅供测试,在issue1分支push的时候,自动触发sonar_preview这个job,它执行sonar_preview.sh脚本,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/bin/bash mvn --batch-mode verify sonar:sonar \ -Dsonar.host.url=http://192.168.1.139:9000 \ -Dsonar.login=admin \ -Dsonar.password=admin \ -Dsonar.analysis.mode=preview \ -Dsonar.gitlab.project_id=$CI_PROJECT_ID \ -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \ -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME if [ $? -eq 0 ]; then echo "sonarqube code-analyze-preview over." fi |
其中
另一种情况是当我们要合并到develop分支时,就会执行sonar_analyze这个job,执行sonar_analyze.sh,如下
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash mvn --batch-mode sonar:sonar \ -Dsonar.host.url=http://192.168.1.139:9000 \ -Dsonar.login=admin \ -Dsonar.password=admin \ -Dsonar.issuesReport.html.enable=true \ -Dsonar.preview.excludePlugins=issueassign,scmstats if [ $? -eq 0 ]; then echo "sonarqube code-analyze over." fi |
没有preview模式,会将结果直接上传sonarqube,我们可以到sonarqube页面查看结果了。
坑
这里遇到的坑可能就是版本了,一是sonarqube选择7.6,二是sonar-gitlab-plugin选择Version 4.1.0-SNAPSHOT应该就没问题,其他情况没试过。