sonarqube整合gitlab

概述

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

其中Dsonar.host.url为sonarqube服务器地址,Dsonar.loginDsonar.password根据实际情况修改,其他默认不变即可。这样达到的效果,就是我们在push issue1这个分支时,会自动触发preview模式(这个模式在sonarqube7.7之后已经不支持,所以我们选用了7.6版本),它不会将结果上传到sonarqube服务器,但是可供我们到gitlab上直接查看。gitlab选择这次commit,就可以看到这次提价扫描的相关信息,供我们使用。
另一种情况是当我们要合并到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应该就没问题,其他情况没试过。