sonarqube与gitlab集成

零 前期准备

01 安装包

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

02 流程图

img

gitlab,gitlab-runner,sonarQube,sonar-scanner-cli 四者的作用及联系

  1. GitLab: 是一个基于Web的Git仓库管理工具,用于版本控制和协作开发。它提供了代码仓库、问题跟踪、持续集成等功能,使团队能够更好地协作开发。
  2. GitLab Runner: 是GitLab CI/CD(持续集成/持续交付)工具中的一部分,用于在GitLab上运行自动化构建和部署任务。GitLab Runner提供了执行器(executor)来处理各种类型的任务,如编译、测试、构建镜像等。
  3. SonarQube: 是一个开源的代码质量管理平台,用于进行代码静态分析、检测代码缺陷、漏洞等。SonarQube提供了丰富的代码分析规则和报告,可以帮助团队提高代码质量并减少技术债务。
  4. Sonar Scanner CLI: 是SonarQube的命令行工具,用于将代码提交到SonarQube服务器进行代码质量检查和分析。它会扫描代码,并生成有关代码质量、安全性和性能的报告。Sonar Scanner CLI可以与GitLab Runner等CI/CD工具集成,实现自动化的代码质量检查。

03 服务端安装环境

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

  1. 以下ip地址混乱,修改成自己的即可
  2. 方便起见,建议关闭linux的防火墙
  3. 如服务已安装,跳过即可

一 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

img

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!

图示

img

二 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

img

进入文件修改

vi /etc/systemd/system/gitlab-runner.service

img

修改完毕后执行下面两条命令

systemctl daemon-reload

systemctl restart gitlab-runner

02 注册

1> 进入gitlab的项目里查看runner的url和token

位置:gitlab项目(任意一个)->settings->CI/CD->Runners

img

img

2> 绑定CI/CD

gitlab runner 的安装和.gitlab.yml文件配置及触发方式

gitlab-runner register

按如下教程填写

gitlab runner安装与使用

img

上面这里,红框,填写刚刚上面看到的URL

回车后,输入URL下面的gitlab-ci token

img

输入完token后,回车

img

填写runner描述,这里自己填写

img

之后填写runner的tags,用于在之后CI/CD操作时标识使用哪个runner来进行流水线

img

之后填写note,

img

Enter optional maintenance note for the runner:,之后选择需要以哪种方式运行runner,这里我选择用shell方式运行runner,大家可以自行根据自己需要选择

img

img

到此,runner就注册完毕了。可以到gitlab上看下,刚刚注册的runner是否存在

img

出现上图,代表成功,以下简单了解即可

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手动触发

image-20230802134030356

三 安装sonarQube

官网下载地址

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

前期准备工作

  • 安装筹备:jdk1.8
  • 支持的数据库:建议使用MySQL5.7
  • elasticsearch(自带,不需要另外安装)

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

SonarQube安装使用教程

手把手教你SonarQube入门安装与使用

01 下载安装包并进行安装

img

如要安装之前的版本,移到最下边

img

下载后上传到该目录(可自定义)

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文件夹,编辑配置文件

img

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

查看日志

出现如下结果成功

img

浏览器访问地址: http://192.168.153.128:9000/

用户名:admin

密码:admin

06 sonarQube安装中文插件

资料参考地址:SonarQube 7.7 中文插件安装

官网地址:https://github.com/xuhuisheng/sonar-l10n-zh

兼容列表

img

根据自己的版本选择,修改链接的版本号跳转,选择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时总是停止

img

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地址

查看历史版本

img

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输出版本号,验证安装正确。

img

五 集成

资料参考地址: sonarqube与gitlab集成

按第二章第四节配置.gitlab-ci.yml文件,添加到项目的根目录中

img

master分支,添加了.gitlab-ci.yml文件,add之后,commit,然后push到远端,就会触发sonarqube_scan这个job,就会执行script脚本中的命令。观察效果,在gitlab服务器页面

img

待提示Job succeeded,进入sonarqube系统,即可查看到项目分析结果

img

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
#显示如下,则安装成功

img

遇到的问题

linux安装配置环境变量后,java -versiov提示无法执行二进制文件

原因:jdk版本不对

posted @   进击的小蔡鸟  阅读(6716)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示