SonarQube与GitLab集成
Kiml Lv5
1
2
3
24-12-11 初始记录
24-12-12 完成SonarQube与插件的安装
24-12-16 maven 与 多模块项目

准备工作

  1. SonarQube:选择适合项目的 SonarQube 版本。~Java8 适配的 SonarQube 版本最高为 7.8~。这里部署的是: docker 方式的 9.9 LTS 版本官方长期支持版本

  2. GitLab:14.9.1 版本

1
2
# 可以通过以下命令查看
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
  1. docker:Docker version 20.10.17, build 100c701。官方推荐版本 20.10 以上。

  2. Gitlab CI

  3. SonarScanner/Maven + Java 11

SonarQube 安装

  1. docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
version: "3"

services:
sonarqube:
image: sonarqube:9.9-community
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_conf:/opt/sonarqube/conf
ports:
- "9000:9000"
db:
image: postgres:15.3
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data

volumes:
sonarqube_data:
external: true
sonarqube_extensions:
external: true
sonarqube_logs:
external: true
sonarqube_conf:
external: true
postgresql:
postgresql_data:
  1. docker-compose 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 前台启动, 启动项目中的所有服务。
docker-compose up
# 后台启动, 启动所有服务并在后台运行。
docker-compose up -d
# -f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定
docker-compose -f docker-compose.yml up -d

# 列出项目中目前的所有容器
docker-compose ps

# 停止所有服务。
docker-compose stop

# 停止和删除容器、网络、卷、镜像。
docker-compose down
# 删除已经在compose文件中定义的和匿名的附在容器上的数据卷
docker-compose down -v

SonarQube 插件安装

SonarQube 有两个插件:

  1. 下载 sonar-gitlab-plugin 对应 5.4 版本的 jar 包

  2. 下载 sonarqube-community-branch-plugin 对应 1.14.0 的 jar 包

  3. 上传 jar 包到挂载的 sonarqube_extensions 目录里面的 plugins 目录里面。上传到 JumpServer 可以在目录下输入:rz;下载为 sz

  4. 修改挂载的 sonarqube_conf 目录路径下面的 sonar.properties 配置文件,添加如下配置

1
2
sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.14.0.jar=web
sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.14.0.jar=ce
  1. 重启 SonarQube

Gitlab CI 安装与注册

  1. 版本确认
    image
    image

  2. 安装与 Gitlab 一致的 Gitlab-Runner 版本。

1
2
3
4
5
6
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/gitlab-runner-14.9.0-1.x86_64.rpm --no-check-certificate

sudo rpm -ivh gitlab-runner-14.9.0-1.x86_64.rpm

# 查看是否安装成功
gitlab-runner -v
  1. 指定 gitlab-runner 用户为 root 用户

1
2
3
sudo gitlab-runner uninstall 

sudo gitlab-runner install --working-directory /home/zwadmin --user zwadmin
  1. 启动 gitlab 服务

1
2
3
4
5
6
7
systemctl daemon-reload

/bin/systemctl start gitlab-runner

/bin/systemctl enable gitlab-runner

/bin/systemctl restart gitlab-runner
  1. 设置权限

1
chown -R zwadmin.zwadmin /home/gitlab-runner
  1. 注册服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
gitlab-runner register
#输入公司的gitlab公网地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://gitlab.wuidm.com/
#输入gitlab的token
Please enter the gitlab-ci token for this runner:

#输入描述这个runner名称
Please enter the gitlab-ci description for this runner: [k8s-node02]:
test
#输入runner的标签
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
Registering runner... succeeded runner=8sjydnrs
#输入runner执行器的环境
Please enter the executor: custom, docker-ssh, parallels, kubernetes, docker-ssh+machine, docker, shell, ssh, virtualbox, docker+machine:
shell

image

SonarScanner 安装

多模块项目建议用 Maven,这部分可以不看

  1. 官网下载

  2. 上传服务器后,解压

  3. 配置环境变量

1
2
3
4
5
6
7
8
9
10
sudo vim /etc/profile

# 添加以下语句
export SONARRUNNER_HOME=/home/zwadmin/soft/sonar-scanner/sonar-scanner-6.2.1.4610-linux-x64
export PATH=$SONARRUNNER_HOME/bin:$PATH

sudo source /etc/profile

# 查看是否安装成功
sonar-scanner -v

Maven 安装

Maven更适配多模块项目

  1. 官网下载

  2. 上传服务器后,解压

  3. 配置环境变量

1
2
3
4
5
6
7
8
9
10
sudo vim /etc/profile

# 添加以下语句
export M2_HOME=/opt/maven
export PATH=$M2_HOME/bin:$PATH

source /etc/profile

# 查看是否安装成功
mvn -v

与 Gitlab 集成

  1. 登录 gitlab.com,创建一个测试仓库,并在用户设置里面,创建一个个人访问令牌。
    image

  2. 登录 SonarQube,在 project 管理里面即可通过这个个人访问令牌来导入 gitlab 上面的项目
    image

  3. 导入后,选择以 gitlab ci 的方式来执行 ci 流程前提 gitlab ci 开启
    image

  4. 根据提示,完成所有步骤。

  • 在项目中创建 sonar-project.properties, 并粘贴提示内的内容。多分支指定分支需要下载 sonarqube-community-branch-plugin 插件。额外添加sonar.branch.name=XXX
    image

  • 在 gitlab 的设置, CI/CD 设置里面,添加环境变量

  • 在项目里面创建一个 .gitlab-ci.yml 文件,并按照提示贴入最小化配置内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sonarqube-check:  
tags:
- test
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner
allow_failure: true
only:
- master
# - merge_requests
# - develop
  1. 在 SonarQube 的通用配置里面,配置好 base URL, 以方便在 gitlab 的评论里面能够正确连接到 SonarQube 平台。
    image

使用 Maven 与 Gitlab 集成

Maven更适配多模块项目,1、2、3、5步骤相同,4配置如下

  • 在父项目 pom.xml 文件中添加配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<properties>
<sonar.qualitygate.wait>true</sonar.qualitygate.wait>
</properties>

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.11.0.3922</version>
</plugin>
</plugins>
</pluginManagement>
</build>
  • 在 gitlab 的设置, CI/CD 设置里面,添加环境变量

  • 在项目里面创建一个 .gitlab-ci.yml 文件,并按照提示贴入最小化配置内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sonarqube-check:
tags:
- sonar
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- JAVA_HOME=/home/zwadmin/data/jdk-11/ && export JAVA_HOME
- mvn verify sonar:sonar -Dsonar.projectKey=com.ydm:zw-ydm -Dsonar.branch.name=feature/sonar-1216
allow_failure: true
only:
- feature/sonar-1216
# - merge_requests

整合 IDEA 插件

用于同步服务器上的规则、质量配置文件和文件排除设置。

  1. 创建token类型为用户
    image

  2. IDEA Plugins Marketplace 下载 SonarQube for IDE。

  3. 连接到SonarQube。
    image
    image

  4. 配置项目
    image

BUG 记录

docker 拉取失败 (Client.Timeout exceeded while awaiting headers)

内链:[[Docker拉取失败 (Client.Timeout exceeded while awaiting headers)]]

外链:Docker拉取失败 (Client.Timeout exceeded while awaiting headers)

docker-compose 加载挂载卷,只加载默认

未完全解决。有一个较麻烦的方法。

  1. 手动挂载卷

1
2
3
4
sudo docker volume create --driver local --opt type=none --opt device=/home/zwadmin/data/docker/sonarqube/data --opt o=bind sonarqube_data
sudo docker volume create --driver local --opt type=none --opt device=/home/zwadmin/data/docker/sonarqube/extensions --opt o=bind sonarqube_extensions
sudo docker volume create --driver local --opt type=none --opt device=/home/zwadmin/data/docker/sonarqube/logs --opt o=bind sonarqube_logs
sudo docker volume create --driver local --opt type=none --opt device=/home/zwadmin/data/docker/sonarqube/conf --opt o=bind sonarqube_conf
  1. docker-compose.yml 中从外部加载卷

1
2
3
volumes:
sonarqube_data:
external: true
 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量