通过 SonarQube审查gitlab项目上的代码,并实现CI/CD

发布时间 2023-07-19 15:35:57作者: 宝英姐姐

公司想要实现代码的审查功能,例如:代码的安全性,代码的重复性

公司代码是统一推送到gitlab上,公司项目后端又是基于Djingo架构

故使用SonarQube

SonarQube组件包含:

  • SonarQube Server:sonarqube服务端,接受客户端扫描报告
  • SonarQube Database:ES/及数据库引擎oracle,postgresql,mssql
  • SonarQube Plugins:可以后期在sonarqube服务端安装插件
  • SonarQube Scanner:安装在客户端扫描工具

一、先安装SonarQube Server,

这里为了方便,所以通过docker安装,

先拉取镜像

docker pull sonarqube

启动容器

docker run -d --name sonarqube -p 9002:9000 sonarqube

然后我们在浏览器访问

http://ip:90002

如图所示,我们耐心等待下

默认用户名和密码都为admin

 

输入用户名和密码后,由于首次登录会让修改密码

依次输出原先密码,设置新密码,确认密码

 因为公司使用的gitlab,所以这里选择gitlab

 然后会出现这个界面

 会让输出名字,gitlab的url,以及gitlab的token

关于gitlab的安装部署,可以参考这篇博客:https://www.cnblogs.com/likecoke/p/17564998.html

这里就不详细说明了

依次填写下信息

名字自己取

我这里写的是demo

gitlab的url为

http://ip:7002/api/v4

注意:http://ip:7002这个地址为你的gitlab的项目访问地址,需再后面加上/api/v4

gitlab的token

需要登录到gitlab的项目地址里,去找下

登录进来后,点击右上角的头像选择偏好设置

注意我这里已经将gitlab的语言设置为中文了

如果不会设置成中文的话,也可以参考下这篇博客:https://www.cnblogs.com/likecoke/p/17564998.html

然后点击左边的访问令牌,创建一个token

 先输出令牌名称,再选择下到期时间,最后最好都勾上选项

然后我们往下翻,选择创建个人访问令牌

 然后我们再回到最上面,复制这个token,一定要记住,一定要记住,一定要记住

 然后我们再返回到sonarqube的web页面,输入刚刚复制的token

 点击save configuration

会跳转到这个页面,然后我们再输入刚刚复制的token

 点击save,然后我们会看到自己在gitlab上的项目

 

二、安装SonarQube Scanner

这个SonarQube Scanner是安装部署到gitlab的runner上

gitlabrunner如何安装部署,可以搜索下其他人写的博客

wget一下安装包

wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip

解压压缩包

unzip sonar-scanner-cli-4.0.0.1744-linux.zip

得到一个sonar-scanner-4.0.0.1744-linux文件夹,然后修改下文件名

mv sonar-scanner-4.0.0.1744-linux sonar-scanner

添加到PATH里

cat > /etc/profile.d/sonar-scanner.sh <<EOF

export PATH=$PATH:/home/data/sonar-scanner/bin EOF

EOF

注意:/home/data/sonar-scanner为服务器上sonar-scanner文件夹实际的存储路径

立即生效下

source /etc/profile.d/sonar-scanner.sh

测试是否成功安装

sonar-scanner -h

三、将sonarqube的web界面汉化 

从官网下载中文的jar包

网址:https://github.com/xuhuisheng/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-10.1

下载第一个jar包

 下载后,将jar包上传至服务器上,因为sonarqube是通过docker安装的,所以需要将jar包拷贝至sonarqube容器里

先进入到sonarqube容器里,创建下文件夹

docker exec -it sonarqube /bin/bash

mkdir -p /opt/sonarqube/extensions/plugins

然后退出容器

exit

将sonar-l10n-zh-plugin-10.1.jar文件拷贝到sonarqube容器里的/opt/sonarqube/extensions/plugins文件夹下

docker cp sonar-l10n-zh-plugin-10.1.jar sonarqube:/opt/sonarqube/extensions/plugins

重启sonarqube容器

docker restart sonarqube

刷新下sonarqube的web界面或退出重新登录,发现已经汉化成功

 

四、配置项目

登录到sonarqube网址里

依次点击项目,来自gitlab

 添加需要审查gitlab项目上的代码

这里选择的demo项目,然后点击设置

 跳转到该页面

 根据实际环境,选择对应的配置即可

 点击创建

 接下来会跳转到该页面,配置CI

选择 使用gitlabCI

 会出现这个页面,根据提示,我们去配置

应该先添加环境变量

 登录到gitlab网站上,找到demo项目

依次点击左边的设置,CI/CD

 然后找到变量,点击展开

 

点击添加变量

 

键填写sonarqube上的第一个

也就是图片中红色框住的内容

值的话,点击创建令牌,

 然后选择下过期时间,选择完后,点击创建

 会自动生成值,将该值复制记住,将该值复制记住,将该值复制记住

 然后点击继续

 将刚刚复制好的值,贴到这里来

并将下面的勾选中的保护变量,去掉

然后添加变量

 再添加一个变量

键和值分别写图片上的这两个内容,也就是SONAR_HOST_URL和http://192.168.1.56:9002

 

 

将下面的勾选中的保护变量,去掉

然后添加变量

 在gitlab的web界面上添加完两个变量后

返回至sonarqube的web界面

点击继续

会跳转到该页面

根据图片中的提示

1.使用什么构建技术? 

我这里选择的是其他,因为公司使用的python

2.在仓库中创建 sonar-project.properties文件,粘贴以下代码:

sonar.projectKey=root_demo_AYlsjPyXkVuXCVURLKSY
sonar.qualitygate.wait=true

这里需要返回至gitlab的web界面

选择demo项目后

点击仓库,选择新建文件

 

把代码占进来

 

sonar.projectKey=root_demo_AYlsjPyXkVuXCVURLKSY
sonar.qualitygate.wait=true

sonar.host.url=http://192.168.1.56:9002


注意最后一行是我自己添加的,因为gitlab和sonarqube没有部署在同一台服务器上
最好加上最后一行的配置

 然后填写file name

写成sonar-project.properties

 

 

 最后点击 commit changes

3.使用以下内容创建或更新你的.gitlab-ci.yml文件。

sonarqube-check:
image:
name: sonarsource/sonar-scanner-cli:latest
entrypoint: [""]
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner
allow_failure: true
rules:
- if: $CI_COMMIT_BRANCH == 'v2'

这里需要在gitlab上配置下cI/cd

依次点击ci/cd  编辑器 创建新的ci/cd流水线

 将原先的.gitlab-ci.yml配置文件里的内容全部删掉,因为原先里的内容是模板

再把sonarqube上web界面上给的.gitlab-ci.yml配置文件粘进去

如图所示:

然后,我们需要在script下修改下配置

将第一次添加到gitlab变量的token写到这里

也就是这个token

如果忘记了token,去ci/cd的变量里找下

将原先

script: 
    - sonar-scanner

修改成

script: 
    - sonar-scanner -Dsonar.login=sqp_8794c0b7c7e3b573806a5827b6e3fb51be1b00d8

 最终效果是这样:

 

然后点击下面的添加或者是提交更改

 

先不管ci/cd下刚刚提交的流水线,会报错,因为没有配置runner

接下来需要配置下gitlab上的runner

依次点击设置 ci/cd Runner 展开

 需要注册下runner

切换到部署gitlab,gitlab-runner的服务器上

注意以下步骤是基于服务器已安装上gitlab-runner

首先输入注册命令

gitlab-ci-multi-runner register

然后依次输入gitlab的访问地址和注册令牌

 这两个信息都在runner里有

 然后

Enter a description for the runner:

[master]:

Enter tags for the runner (comma-separated):

Enter optional maintenance note for the runner:

这四个都按回车,走默认的,不修改

最后

Enter an executor: ssh, virtualbox, kubernetes, docker, docker-windows, parallels, shell, docker-autoscaler, docker+machine, instance, custom:

输入

shell

 然后编辑 /etc/gitlab-runner/config.toml配置文件

vim /etc/gitlab-runner/config.toml

找到最后两行,把这两行的内容删除掉

 再新加一行内容为:clone_url = "http://192.168.1.55:7002/"

整体修改如下:

 保存退出

重启下gitlab-runner

gitlab-runner restart

返回至gitlab的web页面,刷新下网页,可以看到runner已经成功配置上了

如图所示

最后再返回sonarqube的web页面,点击完成教程

 然后会出现这个

 

配置调通后,最终效果是这样的