Jenkins+Gitlab+SonarQube 代码质量管理集成
- 一、环境准备
- 二、SonarQube安装
- 三、GitLab的安装
- 四、Jenkins的安装
- 五、Jenkins集成SonarQube
- 六、直接在IDEA中执行构建并生成代码检测报告
- 七、使用Jenkins的Job来构建代码扫描任务
一、环境准备
1.1、JDK11环境安装
1.2、Docker环境下搭建SonarQube所需的PostgreSQL数据库
由于本次将安装的SonarQube为最新的7.9版本,所以这里简单实用Docker搭建一个PostgreSQL。
1.2.1、Docker的安装
# 校验Linux的内核是否为3.10及以上
uname -r
# 安装docker
yum install docker
# 配置163镜像
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
常用docker命令
1.2.2、Docker下的PostgreSQL安装
1.2.2.1、下载PostgreSQL镜像
# 拉取最新的postgres镜像
docker pull postgres:10.10
1.2.2.2、数据持久化
# 创建PostgreSQL的数据持久化
docker volume create pgdata
# 查看创建的数据持久化仓库
docker volume ls
1.2.2.3、启动容器
docker run -d -it --rm -v pgdata:/var/lib/postgresql/data -p 5432:5432 docker.io/postgres:10.10
# -it:
# --rm:指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
# -v:给容器挂载存储卷,挂载到容器的某个目录
# -p: 指定端口号
# -d:后台运行
查看容器运行状态
1.2.2.4、登录PostgreSQL
# 进入到PostgreSQL容器中
docker exec -it e20da0174db8 bash
# 切换到postgres系统用户
su postgres
# 创建一个给SonarQube使用的超级用户(-s 是指成为超级用户,-P(大定)是指定密码)
createuser -P -s -e sonar
1.2.2.5、创建snor数据库
# 连接数据库
psql
# 创建sonar数据库
create database sonar owner=sonar;
给sonar数据库创建一个schema
# 切换到sonar数据库
\c sonar
# 创建schema指定owner
create schema my_schema authorization sonar;
二、SonarQube安装
2.1、下载SonarQube
SonarQube下载链接
点击链接,进入到官网,选择7.9版本进行下载
# 下载SonarQube
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip
这里在Linux主机中使用wget下载应用比较慢,也可以直接在windows平台下下载完成后,使用rz命令上传到Linux主机中。
这里如果执行rz出现下面的命令没有找到的,那就安装一下
上传SonarQube压缩包
2.2、解压SonarQube的zip文件
使用unzip工具解压zip文件
# 解压zip文件
unzip sonarqube-7.9.1.zip
# 安装unzip
yum install -y unzip zip
解压后文件
2.3、创建SonarQube的用户sonar
# 创建sonar用户
useradd sonar
# 修改/opt/sonarqube-7.9.1文件夹的所属用户组和用户都为sonar
chown -R sonar.sonar /opt/sonarqube-7.9.1
2.4、优化系统的参数
这里的优化参数,配置后可能还是会有问题,具体可以从log日志中去查看报错的问题原因,然后对应修改!!!
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -u 4096 sonar
ulimit -n 65536 sonar
2.5、更改配置文件
# 修改配置文件
vim ./conf/sonar.properties
2.5.1、配置数据库登录用户和密码
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
2.5.2、配置数据库链接池相关属性
sonar.jdbc.maxActive=60
sonar.jdbc.maxIdle=5
sonar.jdbc.minIdle=2
sonar.jdbc.maxWait=5000
sonar.jdbc.minEvictableIdleTimeMillis=600000
sonar.jdbc.timeBetweenEvictionRunsMillis=30000
2.5.3、配置web访问相关
sonar.web.host=0.0.0.0
sonar.web.port=9000
2.6、启动SonarQube(需要2G内存)
./bin/linux-x86-64/sonar.sh start
启动成功后可以看到在之前的schema中创建了很多表。
登录SonarQubehttp://192.168.2.200:9000
点击login后输入账号:admin;密码:admin登录管理平台。
2.7、SonarQube汉化插件的安装
等待服务重启后,刷新页面即可如下汉化版本
2.8、sonar-scanner插件的安装(这个插件按的安装和下面的在Jenkins部分配置的插件可能相同,这部分没有做再次测试)
标题处的描述,主要是由于此处是在200主机(sonar安装的主机)上安装一个sonar-scanner,下面再Jenkins的sonar-scanner服务的配置的时候,又选择了自动安装。理论上这里安装的应该是同一个东西,但是笔者在测试的时候,发现自己安装的虽然在填写sonar-scanner的home目录填写没有问题,但是Jenkins的job构建的时候还是出现了错误。
2.8.1、sonar-scanner的下载与解压
# 进入software文件夹(该文件夹为自己创建用来存放软件的zip安装包)
cd ./software
# 下载sonar-scanner插件zip包
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
# 将该zip文件解压到opt文件夹下
unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /opt
# 进入到opt文件夹,然后修改解压后的文件夹名称为sonar-scanner
mv sonar-scanner-4.0.0.1744-linux sonar-scanner
2.8.2、sonar-scanner的环境变量配置
# 配置环境变量
vim /etc/profile
export SONAR_SCANNER_HOME=/opt/sonar-scanner
export PATH=$PATH:${SONAR_SCANNER_HOME}/bin
保存后执行下面的命令,使配置生效!
# 使配置生效
source /etc/profile
2.8.3、配置sonar-scanner
vim /opt/sonar-scanner/conf/sonar-scanner.properties
2.8.4、验证sonar-scanner
sonar-scanner -h
执行后看到下图,说明配置成功了。
三、GitLab的安装
【Jenkins+Ansible+Gitlab 自动化部署三剑客】学习笔记-第二章 2-1~2-3 GitLab介绍与安装配置管理
四、Jenkins的安装
【Jenkins+Ansible+Gitlab 自动化部署三剑客】学习笔记-第四章 4-1~4-3 Jenkins介绍
五、Jenkins集成SonarQube
5.1、安装SonarQube Scanner插件
静静等待插件的安装。
5.2、jenkins配置sonar服务信息
登录到sonar的管理平台,如下图所示操作
获取创建的用户的token值。
token:903d9f33ac6c1f3d6dd9e1bb23ebcb968fd6510b
接着登录到Jenkins的管理平台,在系统管理中的系统设置下找到如下图所示的部分,然后点击圆圈中的按钮。
配置名称和sonar主机的访问IP地址。
5.3、Jenkins配置SonarQube Scanner服务信息
5.3.1、自己安装的SonarQube Scanner的配置
这里需要注意的是,当前我的sonar是安装在192.168.2.200的主机上,而Jenkins是在192.168.2.203。这里添加了SONAR_RUNNER_HOME,也会报黄色警告,说明不在当前的主机中,没关系。(此处的配置即上面红色文字处描述的问题内容)
5.3.2、使用Jenkins自动安装SonarQube Scanner的配置
登录到Jenkins的管理平台,然后再如下图配置。
5.4、Maven集成SonarQube
登录到Jenkins的主机203,然后找到该主机下的maven
# 进入到maven的安装目录
cd /opt/apache-maven-3.6.2/
5.4.1、设置插件前缀
vim conf/settings.xml
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
</settings>
5.4.2、配置sonar的服务器URL
<settings>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://192.168.2.200:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
。。。。。。。。。。。。。。。。。未完待续。。。。。。。。。。
六、直接在IDEA中执行构建并生成代码检测报告
6.1、登录到sonarqube管理平台,新建一个项目
具体操作如下图所示。
6.2、拷贝上面的maven执行命令到IDEA的测试项目中执行
# 直接黏贴到idea的maven插件中执行
mvn sonar:sonar \
-Dsonar.projectKey=test01 \
-Dsonar.host.url=http://192.168.2.200:9000 \
-Dsonar.login=9dd99f1c2a31899a6cda897d65e403e89ff41b40
稍等之后就出现了分析图(内容省略~~~)
七、使用Jenkins的Job来构建代码扫描任务
7.1、构建maven项目
如果构建的是一个maven项目需要在配置中添加pom.xml文件的路径
7.2、构建一个自由风格的软件项目
7.2.1、创建一个项目
7.2.2、点击构建
如下为日志输出部分
切回到sonarqube的管理界面
7.3、为构建的Job添加GitLab提交触发的配置
前面的7.1和7.2中已经完成了手动执行jenkins执行sonar任务完成构建部署任务,下面说明如何在代码提交后让gitlab自动触发jenkins执行sonar任务。
7.3.1、Jenkins中安装GitLab插件
7.3.2、在GitLab中创建访问token
7.3.3、在Jenkins中配置GitLab插件
在jenkins中,进入“系统管理”-“系统设置”-“Gitlab”配置。
添加完成后即可在当前选项中,选择刚添加的gitlab的凭证了,选择后点击右侧的“Test Connection”测试是否可以连接成功。
7.3.4、配置Jenkins任务,启用触发器
进入jenkins的任务设置界面,在“构建触发器”中,勾上“Build when a change pushed to Gitlab.Gitlab webhook URL …”(这里的webhook URL在后面配置gitlab时需要),根据自己的需要设置其它的选项。点击“高级”按钮,然后点击“Generate”按钮生成Secret token(这里的token后面配置gitlab时需要)。
7.3.5、在GitLab中配置webhook
7.3.6、webhook测试
点击后可以看到在Jenkins的控制台中有了一个构建任务
参考文档