通过 SonarQube审查gitlab项目上的代码,并实现CI/CD
公司想要实现代码的审查功能,例如:代码的安全性,代码的重复性
公司代码是统一推送到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:9002
如图所示,我们耐心等待下

默认用户名和密码都为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:/opt/sonar-scanner/bin
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的变量里找下
将原先
修改成
最终效果是这样:

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

先不管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页面,点击完成教程

然后会出现这个

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


浙公网安备 33010602011771号