0. 最终效果
本次演示通过Docker部署SonarQube和Gitlab,实现代码提交gitlab后,自动执行CI流水线,调用sonar对代码进行静态检测分析,并将检测结果同步到gitlab中。
1. 实验环境
版本号很重要!
版本号很重要!!
版本号很重要!!!
1.1 Sonar GitLab Plugin 4.1.0
⚠️Only SonarQube < 7.7, because preview mode is removed⚠️
官方地址-GitHub
版本 >= sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar
1.2 SonarQube 7.6
官方地址-GitHub
1.3 GitLab 9.1.7
因为该环境已具备,后续不再演示gitlab的搭建过程。
其他版本未测试,但是gitlab的版本应该不影响实验的结果。
2. 安装软件
2.1 通过docker部署SonarQube
docker-compose.yml
version: "2"
services:
sonarqube:
image: sonarqube:7.6-community
depends_on:
- db
ports:
- "7777:9000"
networks:
- sonarnet
environment:
SONARQUBE_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONARQUBE_JDBC_USERNAME: sonar
SONARQUBE_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_temp:/opt/sonarqube/temp
db:
image: postgres
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
networks:
sonarnet:
driver: bridge
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
sonarqube_temp:
postgresql:
postgresql_data:
启动
docker-compose up -d
访问
http://127.0.0.1:7777
(默认)用户名:admin
(默认)密码:admin
2.1.1 安装 Sonar GitLab Plugin
下载:sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar,将jar包拷贝到sonar的plugin目录下:
docker cp ./sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar sonar_sonarqube_1:/opt/sonarqube/extensions/plugins/
重启sonar即可使插件生效。
2.1.2 关联GitLab
切换到Administration > Configuration > GitLab功能,
- 设置gitlab的地址
- 设置可以访问gitlab的用户的访问token,⚠️该用户必须拥有开发者权限。
获取User Token
新建一个gitlab用户:sonarQube,用该用户登录。
此处的“名称”可以随便填,目的在于方便记忆。
将生成后的Token填入Sonar即可。
分配权限
将sonarQube用户添加到需要检测的项目中,分配“开发者”权限。
2.2 Docker安装GitLab-runner
gitlab-runner启动脚本:start_runner.sh
docker run -d --name gitlab-runner --restart always \
-v /home/pay/docker/gitlab_runner/conf:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
gitlab-runner注册脚本:register.sh
docker exec -it gitlab-runner gitlab-ci-multi-runner register -n \
--url ⚠️http://your-gitlab-com⚠️ \
--registration-token "⚠️PROJECT_REGISTRATION_TOKEN⚠️"\
--tag-list=gitlab-pos \
--description "gitlab-pos" \
--docker-privileged=false \
--docker-pull-policy="if-not-present" \
--docker-image "maven:3.6.3-jdk-8:latest" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-volumes /home/your/path/m2:/root/.m2 \
--docker-volumes /home/your/path/cache:/cache \
--executor docker
点击查看官网示例
要点说明:
url:
gitlab的访问地址
registration-token
gitlab要注册新的 Runner 所需要输入后面的注册授权码。
管理员登录后,在“管理区域 > Runners”菜单即可查看或者重置token
docker-image
此处我们选择maven:3.6.3-jdk-8:latest,因为我们的Java项目是通过maven来管理依赖,编译时也需要jdk环境。
docker-volumes /home/your/path/m2:/root/.m2
容器中,会将maven的settings-docker.xml配置和缓存的jar包放在/root/.m2目录下,⚠️我们可以修改settings-docker.xml,配置私有maven库或者镜像⚠️
/usr/share/maven/ref/repository
nexus-private
central
Nexus osc
http://127.0.0.1/repository/maven-central/
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
3. 开启Gitlab CI
在项目根目录添加文件:.gitlab-ci.yml
image: maven:3.6.3-jdk-8
stages:
- scanner
example-sonar:
stage: scanner
tags:
- gitlab-pos
script:
- mvn clean verify -Dmaven.test.skip=true
- mvn -e -X --batch-mode sonar:sonar
-Dsonar.host.url=http://127.0.0.1:7777
-Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
-Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
-Dsonar.gitlab.project_id=$CI_PROJECT_ID
-Dsonar.issuesReport.html.enable=true
-Dsonar.analysis.mode=preview #设置后,sonar不创建项目,只做分析
提交后,在gitlab项目界面,查看流水线即可查看执行状态。