sonarqube与gitlab集成
零 前期准备
01 安装包
链接:https://pan.baidu.com/s/1xL1dyOnqubZ6NwcWwWh7FQ?pwd=4kws
提取码:4kws
02 流程图
gitlab,gitlab-runner,sonarQube,sonar-scanner-cli 四者的作用及联系
- GitLab: 是一个基于Web的Git仓库管理工具,用于版本控制和协作开发。它提供了代码仓库、问题跟踪、持续集成等功能,使团队能够更好地协作开发。
- GitLab Runner: 是GitLab CI/CD(持续集成/持续交付)工具中的一部分,用于在GitLab上运行自动化构建和部署任务。GitLab Runner提供了执行器(executor)来处理各种类型的任务,如编译、测试、构建镜像等。
- SonarQube: 是一个开源的代码质量管理平台,用于进行代码静态分析、检测代码缺陷、漏洞等。SonarQube提供了丰富的代码分析规则和报告,可以帮助团队提高代码质量并减少技术债务。
- Sonar Scanner CLI: 是SonarQube的命令行工具,用于将代码提交到SonarQube服务器进行代码质量检查和分析。它会扫描代码,并生成有关代码质量、安全性和性能的报告。Sonar Scanner CLI可以与GitLab Runner等CI/CD工具集成,实现自动化的代码质量检查。
03 服务端安装环境
- centos 7 (CentOS Linux release 7.9.2009 (Core))
- gitlab(15.0.1)当时最新
- gitlab-runner(15.0.1)当时最新
- sonarQube7.7
- jdk1.8
- mysql5.7
- sonar-scanner-cli-4.1.0.1829-linux
#查看linux系统的版本
cat /etc/redhat-release
#查看gitlab版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
温馨提示:
注意:
gitlab和gitlab-runner版本保持一致
- 以下ip地址混乱,修改成自己的即可
- 方便起见,建议关闭linux的防火墙
- 如服务已安装,跳过即可
一 yum安装gitlab
参考资料地址1 :
yum安装gitlab
参考资料地址2 :
Yum一键安装GitLab
1、安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
2、配置系统环境
systemctl enable sshd #启动ssh服务
systemctl start sshd #设置开机启动
systemctl enable postfix && systemctl start postfix #设置postfix开机自启并启动 postfix支持gitlab发信功能
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload #开放ssh以及http服务 然后重新加载防火墙列表
#如果关闭防火墙上面这三步就不需要配置
systemctl stop firewalld #停止firewalld防火墙服务
systemctl disable firewalld #禁用firewalld服务开机自启
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux #关闭selinux 重启生效
setenforce 0 #关闭selinux 当前生效
3、添加清华大学yum源
[root@localhost ~]vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
[root@localhost ~]# yum makecache #更新本地yum缓存
4、安装gitlab
yum install -y gitlab-ce #安装最新gitlab
5、修改gitlab配置
vim /etc/gitlab/gitlab.rb
# 文件中添加如下配置
external_url 'http://192.168.136.100:82' #自己服务的ip,为了避免端口号冲突请修改
nginx['listen_port'] = 82
6、重载配置,重启服务
gitlab-ctl reconfigure #重载配置
gitlab-ctl restart #重新启动
7、查看网页登录后初始密码
cat /etc/gitlab/initial_root_password
8、访问主页
192.168.136.100:82
用户名为root
9、重置密码
资料参考地址3:
Gitlab问题之重置root密码
01 进入gitlab控制台
gitlab-rails console -e production
或者(不同版本有区别)
gitlab-rails console production
02 查询gitlab超管用户信息
user= User.where(id:1).first
03 重置密码
user.password='root@123456'
user.password_confirmation='root@123456'
04 保存
user.save!
图示
二 gitlab-runner安装与配置
01 安装
1> 下载安装
# 下载
curl -s https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
# 安装
yum install gitlab-runner
2> 指定 root 账号执行脚本命令
先查看当前runner执行命令账号,将默认账号改为root
ps aux|grep gitlab-runner
进入文件修改
vi /etc/systemd/system/gitlab-runner.service
修改完毕后执行下面两条命令
systemctl daemon-reload
systemctl restart gitlab-runner
02 注册
1> 进入gitlab的项目里查看runner的url和token
位置:gitlab项目(任意一个)->settings->CI/CD->Runners
2> 绑定CI/CD
gitlab runner 的安装和.gitlab.yml文件配置及触发方式
gitlab-runner register
按如下教程填写
上面这里,红框,填写刚刚上面看到的URL
回车后,输入URL下面的gitlab-ci token
输入完token后,回车
填写runner描述,这里自己填写
之后填写runner的tags,用于在之后CI/CD操作时标识使用哪个runner
来进行流水线
之后填写note,
Enter optional maintenance note for the runner:,之后选择需要以哪种方式运行runner,这里我选择用shell方式运行runner,大家可以自行根据自己需要选择
到此,runner就注册完毕了。可以到gitlab上看下,刚刚注册的runner是否存在
出现上图,代表成功,以下简单了解即可
tags配置解释
Please enter the gitlab-ci tags for this runner (comma separated):
在上述配置中,这项配置也很重要,这里的
tags
后续会在.gitlab-ci.yml
文件配置中用到 配置好的runner可以到[root@localhost ~]# vi /etc/gitlab-runner/config.toml
查看具体的配置信息并进行修改
03 gitlab Runner常用命令汇总
命令 | 描述 |
---|---|
gitlab-runner run | 运行一个runner服务 |
gitlab-runner register | 注册一个新的runner |
gitlab-runner start | 启动服务 |
gitlab-runner stop | 关闭服务 |
gitlab-runner restart | 重启服务 |
gitlab-runner status | 查看各个runner的状态 |
gitlab-runner unregister | 注销掉某个runner |
gitlab-runner list | 显示所有运行着的runner |
gitlab-runner verify | 检查已注册的运行程序是否可以连接到GitLab,但它不验证GitLab Runner服务是否正在使用运行程序。 |
04 配置.gitlab.yml文件(重点
)
.gitlab.yml文件用来控制CI过程中需要执行的操作,它的创建位置在工程的根目录下。直接创建即可。使用YAML语法,要用空格来缩进,不要使用Tab键。 Stages表示构建阶段,通常有build、test、deploy三个阶段,可以在一次Pipeline中设置多个Stages,Stages会按顺序执行,当一个Stage完成后,下一个Stage才会开始,当所有的Stage都执行成功后,Pipeline才算执行成功。 Jobs表示构建工作,表示某个Stage里面执行的工作,一个Stage中可以有多个Jobs,每个Job按顺序执行,任何Job失败都会导致Stage失败。Job中必须有Script部分。 当有新内容push到仓库,或者有代码合并时Gitlab会检查.gitlab.yml文件,如果文件存在,runner会根据文件内容进行本次commit的构建
举例
#定义 stages(阶段),任务根据这里的顺序执行
stages:
- sonarqube_scan
# 定义job(任务),多个任务分开定义
sonarqube_scan_job:
#阶段,取自开始的stages
stage: sonarqube_scan
#定义该job执行的脚本
#注意-Dsonar.host.url 是sonarqube服务器地址
#-Dsonar.login 是sonarqube服务器地址账号
#-Dsonar.password 是sonarqube服务器地址密码
#-Dsonar.java.binaries=. sonar4.12版本之后,分析java代码需要提供该参数。
script:
- sonar-scanner -Dsonar.projectName=$CI_PROJECT_NAME -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.language=java -Dsonar.java.binaries=. -Dsonar.host.url=http://192.168.153.129:8100 -Dsonar.login=admin -Dsonar.password=admin
# - echo "sonarqube_scan is done"
#标签,只有这个标签的runner才会执行任务;在gilab-runner注册时填写的tag-list
tags:
- Trunner
when: always
#只有指定的分支提交才会执行
only:
- master
踩坑点
建议gitlab-runner和gitlab保持一致,之前安装runner,注册成功了,但死活没有job输出。
.gitlab-ci.yml的脚本,要有参数 -Dsonar.java.binaries=. 否则报错
05 触发运行
如上我们在本地代码库的
master分支,添加了.gitlab-ci.yml文件,add之后,commit,然后push到远端,就会触发sonar这个job,就会执行script脚本中的命令。观察效果,在gitlab服务器页面
想要看具体执行的信息,可以通过点击pass或者failed按钮进行查看,可见我们的echo语句生效了
这里经常会出现yaml文件格式不对的问题,可以借助gitlab页面CI Lint进行辅助编写
这样我们就跑通了每次push issue1分支都能触发CI Pipeline的例子,具体工作中我们可以调整分支名称,编写具体的script脚本或者丰富.gitlab-ci.yml其他配置信息来达到项目的具体要求
06 灵活配置
master 自动运行分析任务,字母 "b" 开头的分支手动触发
when: always
#只有指定的分支提交才会执行
only:
- master
替换为
# 当满足以下条件时,任务会自动运行
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
- if: '$CI_COMMIT_BRANCH =~ /^b.*/'
when: manual
b分支提交后到gitlab手动触发
三 安装sonarQube
参考资料地址:SonarQube安装教程
前期准备工作
- 安装筹备:jdk1.8
- 支持的数据库:建议使用MySQL5.7
- elasticsearch(自带,不需要另外安装)
资料参考地址: Linux下安装sonarQube
01 下载安装包并进行安装
如要安装之前的版本,移到最下边
下载后上传到该目录(可自定义)
cd /usr/local
#上传
unzip sonarqube-7.7.zip #解压
rm -rf sonarqube-7.7.zip #删除安装包
02 打开MySQL创建Sonar数据库
CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;
03 打开sonar文件夹,编辑配置文件
vim sonarqube-7.7/conf/sonar.properties #修改以下数据库的配置
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://192.168.136.129:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
默认端口是9000,可以在sonar.properties这里进行修改
sonar.web.host=192.0.0.1
sonar.web.port=80
sonar.web.context=/sonarqube
04 新增sonar用户进行管理
密码asdfghjkl123
useradd sonarUser
passwd sonarUser
#密码 asdfghjkl123
#赋予权限
chown -R sonarUser:sonarUser sonarqube-7.7
05 启动Sonar
# 切换用户,启动SonarQube
su sonarUser
# 项目路径/bin/linux-x86-64/
cd /usr/local/sonarqube-7.7/bin/linux-x86-64/
./sonar.sh start
tail -f sonar.log
查看日志
出现如下结果成功
浏览器访问地址: http://192.168.153.128:9000/
用户名:admin
密码:admin
06 sonarQube安装中文插件
资料参考地址:SonarQube 7.7 中文插件安装
官网地址:https://github.com/xuhuisheng/sonar-l10n-zh
兼容列表
根据自己的版本选择,修改链接的版本号跳转,选择jar包下载
https://github.com/xuhuisheng/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-1.27
将jar包上传到自己sonar项目安装的 extensions/plugins/下
我的在/usr/local/sonarqube-7.7/extensions/plugins下
重新赋予权限 chown -R sonarUser:sonarUser sonarqube-7.7
#重新启动sonarqube
cd /usr/local/sonarqube-7.7/bin/linux-x86-64
# 切换到sonarUser账号
su sonarUser
#重新启动
./sonar.sh restart
#查看日志等待,重启时间较长,耐心等待
07 异常解决
启动sonarqube时总是停止
1 查看是否非root用户
2 数据库是否启动
3 配置文件是否正确,主要是地址
4 es不需要单独安装,已自带
5 修改limits.conf
vi /etc/security/limits.conf
#添加下面两行
sonarUser hard nofile 65536
sonarUser soft nofile 65536
#生效
ulimit -Hn
四 安装sonarQube-scanner
查看历史版本
01 sonar-scanner的安装配置
传到服务器上后,解压到指定目录 unzip sonar-scanner-cli-4.6.2.2472-linux.zip -d /usr/local/,
02 修改/usr/local/sonar-scanner/conf/sonar-scanner.properties 文件
vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
添加如下配置,注意修改地址
#----- Default SonarQube server
sonar.host.url=http://192.168.153.129:9399
sonar.login=admin
sonar.password=admin
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
#数据库连接
#sonar.jdbc.url=jdbc:postgresql://192.168.153.129:3306/sonar
#数据库用户名
#sonar.jdbc.username=root
#数据库密码
#sonar.jdbc.password=123456
(经验证不需要配置数据库连接)
03 配置环境变量 vi /etc/profile,在最后添加两行内容
export SONAR_SCANNER_HOME=/usr/local/sonar-scanner
export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}
退出(按esc,输入:wq!然后回车),运行 source /etc/profile 使其生效。
04 重新加载配置文件
source /etc/profile
05 运行sonar-scanner -v输出版本号,验证安装正确。
五 集成
资料参考地址:
sonarqube与gitlab集成
按第二章第四节配置.gitlab-ci.yml文件,添加到项目的根目录中
master分支,添加了.gitlab-ci.yml文件,add之后,commit,然后push到远端,就会触发sonarqube_scan这个job,就会执行script脚本中的命令。观察效果,在gitlab服务器页面
待提示Job succeeded,进入sonarqube系统,即可查看到项目分析结果
ps:
01 docker安装(主要是为了mysql数据库)
1> 安装
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、安装docker,出现输入的界面都按 y
yum install -y docker-ce
# 5、查看docker版本,验证是否验证成功
docker -v
# 6、启动docker环境
systemctl start docker
# 7、设置开机自启动
systemctl enable docker
异常解决:
异常信息:Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.re
原因:解决docker在代理下不能拉取镜像
关闭vpn
2> 配置镜像加速器【已完成】
默认情况下,将来从docker hub(https://hub.docker.com/)上下载docker镜像,太慢。一般都会配置镜像加速器:
创建或修改
/etc/docker/daemon.json
文件,修改为如下形式:
sudo vim /etc/docker/daemon.json
# 中国科技大学镜像地址
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
# 网易云镜像地址
{
"registry-mirrors":["http://hub-mirror.c.163.com"]
}
# 重启docker
systemctl restart docker
# 查看是否成功
docker info
异常处理:
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
/etc/docker/daemon.json” E212: Can’t open file for writing
docker启动报错:Job for docker. service failed because the control process exited with error code
02 docker部署mysql
# 拉取mysql镜像
docker pull mysql:5.7
# 创建并启动容器
docker run -d -p 3306:3306 --name=mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# 设置mysql开机自启
sudo docker update mysql5.7 --restart=always
03 安装jdk
安装包资料地址
链接:https://pan.baidu.com/s/13oGWbNOEU6WRNUkHKdewCA?pwd=lcnk 提取码:lcnk
#在 /usr/local/创建jdk目录
mkdir /usr/local/jdk
#上传jdk1.8的压缩包
#解压
cd /usr/local/jdk
tar -zxvf jdk-8u321-linux-x64.tar.gz
#删除压缩包
rm -rf jdk-8u321-linux-x64.tar.gz
#修改jdk文件夹名
mv jdk1.8.0_321 jdk1.8
#配置环境变量
vi /etc/profile
#进入编辑模式
按shift+i键,光标移至最后
#最后添加
export JAVA_HOME=/usr/local/jdk/jdk1.8 #修改成自己jdk的安装目录
export CLASSPATH="$JAVA_HOME/lib"
export PATH="$JAVA_HOME/bin:$PATH"
#退出编辑模式
按esc键
#保存并退出
:wq
#重新加载配置文件
source /etc/profile
#查看java环境 ,验证是否安装成功
java -version
#显示如下,则安装成功
遇到的问题
linux安装配置环境变量后,java -versiov提示无法执行二进制文件
原因:jdk版本不对
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库