【详细介绍】 SonarQube集成GitLab
1、基础服务安装
SonarQube是一种自动代码审查工具,可以在持续集成中使用,此文档记录一次SonarQube集成GitLab的过程
安装环境:Docker 20.10.12
GitLab版本:gitlab-ce 12.10.0-ce.0
GitLab-Runner版本:15.0.0
SonarQube版本:sonarqube:8.8-community
Sonar-Scanner版本:sonar-scanner-4.2.0.1873-linux
PostgreSQL版本:PostgreSQL-14版本
GitLab | 192.168.3.9 |
---|---|
GitLab-Runner | 192.168.3.9 |
SonarQube-Server | 192.168.3.235:9000 |
Sonar-Scanner | 192.168.3.9 |
PostgreSQL | 192.168.3.235:5432 |
- PostgreSQL数据库安装
# 采用Docker安装方式安装
[qworld@localhost ~]$ docker pull postgres
[qworld@localhost ~]$ mkdir /opt/data/
[qworld@localhost ~]$ docker run -d -p 5432:5432 -v /opt/data/postgres:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e ALLOW_IP_RANGE=0.0.0.0/0 --name postgres postgres
# 参数说明:
POSTGRES_PASSWORD 是数据库初始密码
ALLOW_IP_RANGE=0.0.0.0/0 允许任何主机访问
[zsj@localhost ~]$ docker exec -it postgresql bash
# 使用默认用户postgres创建SonarQube数据库
root@0f997b196687:/# su postgres
root@0f997b196687:/# psql
root@0f997b196687:/# create database sonar;
root@0f997b196687:/# exit
root@0f997b196687:/# exit
- 部署SonarQube
# 设置环境依赖
[qworld@localhost ~]$ vim /etc/sysctl.conf
# 尾添加如下两行
vm.max_map_count = 262144
fs.file-max = 65536
[qworld@localhost ~]$ sysctl -p
[qworld@localhost ~]$ vi /etc/security/limits.conf
[qworld@localhost ~]$
# 尾添加如下内容:
* soft nofile 65536
* hard nofile 65536
# reboot重启生效
[qworld@localhost ~]$ docker pull sonarqube:8.8-community
# 创建卷挂载数据,也可以直接创建目录挂载数据
[qworld@localhost ~]$ docker volume create --name sonarqube_data
[qworld@localhost ~]$ docker volume create --name sonarqube_logs
[qworld@localhost ~]$ docker volume create --name sonarqube_extensions
[qworld@localhost ~]$ docker volume create --name sonarqube_conf
[qworld@localhost ~]$ docker run -d --name sonarqube \
-p 9000:9000 \
-e SONAR_JDBC_URL=jdbc:postgresql://192.168.3.235:5432/sonar \
-e SONAR_JDBC_USERNAME=postgres \
-e SONAR_JDBC_PASSWORD=123456 \
-v sonarqube_data:/opt/sonarqube/data \
-v sonarqube_extensions:/opt/sonarqube/extensions \
-v sonarqube_logs:/opt/sonarqube/logs \
-v sonarqube_conf:/opt/sonarqube/conf \
sonarqube:8.8-community
浏览器访问http://192.168.3.235:9090 使用默认账号(admin)密码(admin)登录,根据提示修改密码
2、配置SonarQube
# 访问http://192.168.3.9 登录Gitlab*,必须登录具有管理员权限的账号*
-
gitlab生成访问令牌
右上角点击头像,选择设置,然后点击访问令牌,在令牌名称处的输入框中填写一个随机的名称,然后在下方权限选择分别勾选api、read_api、read_user、read_repository,点击确定之后,会显示您的新个人访问令牌,复制这一长串字符串记录i下来,此令牌只显示一次;
-
SonarQube配置地址
进入到SonarQube页面,在上方菜单栏找到配置,然后左侧找到通用,在Server base URL中填写服务端的IP地址
http://192.168.3.235:9000/ >>> SonarQube服务地址
然后依旧在配置页面中,点击ALM集成,找到GitLab,点击创建配置,填写相应的GitLab网址与访问令牌
---
配置名称: SonarQube (自定义)
GitLab网址: http://192.168.3.9/api/v4 (IP地址/api/v4)
个人访问令牌: f1437e64de4a165ce360710aaf3081125460a358 (上文创建的gitlab令牌)
之后点击保存配置会看到绿色的标签,显示配置正确
3、SonarQube集成到GitLab
-
首先在SonarQube中上方的选项栏中点击项目,然后在主页面选择来自GitLab,需要输入上文生成的GitLab访问令牌,成功之后,可以看到GitLab仓库的所有项目代码,需要配置哪个项目就点击哪个项目,然后点击后方的设置,便成功关联到了GitLab具体的项目;
-
注册Runner来运行测试流水线
# 在安装runner的机器上执行此命令
root@0f997b196687:/# gitlab-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
输入Gitlab网址
Please enter the gitlab-ci token for this runner:
输入Gitlab Runner配置页中具体的令牌
Please enter the gitlab-ci description for this runner:
描述
Please enter the gitlab-ci tags for this runner (comma separated):
标签
Whether to run untagged build [true/false]:
回车跳过
Please enter the executor: docker-ssh+machine, docker-ssh, parallers, shell, ssh, virtualbox, docker, docker+machine, kubernetes:
shell
# 到此在GitLab Runner页面刷新即可看到新的Runner
-
安装Runner Scanner
Scanner下载地址: (https://link.juejin.cn/?target=https%3A%2F%2Fdocs.sonarqube.org%2Flatest%2Fanalysis%2Fscan%2Fsonarscanner%2F)
# 如果 gitlab runner 执行器为 shell, 在 runner 所在服务器安装
# 如果 gitlab runner 之行为为 docker, 基于 maven 镜像安装
root@0f997b196687:/# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip
root@0f997b196687:/# apt-get update && apt-get install vim unzip
root@0f997b196687:/# unzip sonar-scanner-cli-4.2.0.1873-linux.zip
root@0f997b196687:/# mv sonar-scanner-cli-4.2.0.1873-linux /user/local
root@0f997b196687:/# vim /etc/profile
# 加入以下内容
export SONAR_HOME=/usr/local/sonar-scanner-4.6.2.2472-linux
export PATH=$PATH:$SONAR_HOME/bin
root@0f997b196687:/# source /etc/profile
在SontarQube生成令牌,右上角账号 >> 我的账号 >> 安全 >> 生成令牌
为避免权限问题, 使用管理员账号生产令牌 记住令牌, 只会显示这一次
# 修改Scanner配置文件
root@0f997b196687:/# vim /usr/local/sonar-scanner-cli-4.2.0.1873-linux/conf/sonar-scanner.properties
# sonar server 服务地址
sonar.host.url=http://192.168.3.235:9000/
# 上一步生产的 sonar tonken
sonar.login=10c0839a8286ab71fdda56f19c9a0bd79e336074
4、配置CICD流水线自动测试
-
在首页项目中找到使用Git Lab CI 点击之后,会出现使用GitLab CI分析项目的标题,下面一共有三个步骤,做完就可以自动化测试了:
1. 设置项目编码 我们使用Maven技术构建项目,选择使用Maven构建,然后在项目的根目录下的pom.xml文件中填入以下配置: <properties> <sonar.projectKey>zhaoshijie_sonarqube_AYFvyLxaLJ9wN2zzMEL5</sonar.projectKey> <sonar.qualitygate.wait>true</sonar.qualitygate.wait> </properties> 2. 添加环境变量 在GitLab中主界面左侧选项栏,点击设置,选择CICD,打开里边的变量,然后将SonarQube中的键与值填入GitLab中即可 3. 创建或修改配置文件 到此步,SonarQube会生成一段简单的流水线job可以添加到gitlab项目下的.gitlab-ci.yml中 cache: paths: - target/ stages: - test sonarqube-check: stage: test tags: - test variables: SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" GIT_DEPTH: "0" cache: key: "${CI_JOB_NAME}" paths: - .sonar/cache script: - mvn verify sonar:sonar allow_failure: true only: - dev