sonarqube与gitlab集成


sonarqube与gitlab集成

部分安装包

链接:https://pan.baidu.com/s/1xL1dyOnqubZ6NwcWwWh7FQ?pwd=4kws
提取码:4kws

温馨提示:

  1. 以下ip地址混乱,修改成自己的即可

  2. 方便起见,建议关闭linux的防火墙

  3. 如服务已安装,跳过即可

服务端安装环境

  1. centos 7 (CentOS Linux release 7.9.2009 (Core))

  2. gitlab(15.0.1)当时最新

  3. gitlab-runner(15.0.1)当时最新

  4. sonarQube7.7

  5. jdk1.8

  6. mysql5.7

  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版本保持一致

一 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

按如下教程填写

gitlab runner安装与使用

上面这里,红框,填写刚刚上面看到的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:
  - main

踩坑点

gitlab社区版,只能对main/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其他配置信息来达到项目的具体要求

三 安装sonarQube

官网下载地址

参考资料地址:SonarQube安装教程

前期准备工作

  • 安装筹备:jdk1.8

  • 支持的数据库:建议使用MySQL5.7

  • elasticsearch(自带,不需要另外安装)

资料参考地址: Linux下安装sonarQube

SonarQube安装使用教程

手把手教你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时总是停止

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

下载sonar-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版本不对