sonarqube、gitlab、gitlab-runner集成,实现代码push后立即扫描代码生成报告
本文介绍gitlab代码托管平台集成gitlab-runner,并与sonar(sonarqube)配合,实现代码push到gitlab后,对代码进行静态扫描,生成质量报告。
1、环境说明
192.168.1.162 服务器上安装gitlab、gitlab-runner、sonar-scanner
192.168.1.161 服务器上安装sonarqube
环境准备
192.168.1.162服务器上需要安装git、jdk环境以及gitlab,这三个环境的安装不做多的介绍,
注:在centos7上搭建gitlab-runner后,第一次自动构建项目成功,第二次后构建项目报错,Git默认安装版本是1.8.3.1,就是版本太低的问题,不支持最新的API
Git下载链接:
Index of /pub/software/scm/git/
也可以自动升级:
yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
yum install git
[root@devops-yanxiao-1-162 ~]# java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
[root@devops-yanxiao-1-162 ~]# git --version
git version 2.22.0
[root@devops-yanxiao-1-162 ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
15.1.2
GitLab Runner v13.x及更高版本:要求JDK 11或更高版本。
GitLab Runner v12.x及更低版本:一般要求JDK 8或更高版本。
192.168.1.161服务器上安装jdk环境版本为jdk11
注:由于我安装的sonarqube比较新,java版本必须16以上
[root@devops-yanxiao-1-161 ~]# java -version
java version "11" 2018-09-25
Java(TM) SE Runtime Environment 18.9 (build 11+28)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11+28, mixed mode)
说明:为何安装的是jdk11,因为sonarqube在7.9以及7.9+版本需要jdk11的支持,本文安装的是sonarqube 9.5版本
2、gitlab-runner安装
gitlab-runner安装在192.168.1.162服务器,与gitlab是同一台服务器,注意gitlab-runner与gitlab版本需要匹配
gitlab-runner下载地址:Index of /gitlab-runner/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
下载
[root@devops-yanxiao-1-162 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-runner/yum/el7/gitlab-runner-15.1.0-1.x86_64.rpm
安装
[root@devops-yanxiao-1-162 ~]# rpm -ivh gitlab-runner-15.1.0-1.x86_64.rpm
启动/重启
[root@devops-yanxiao-1-162 ~]# systemctl start gitlab-runner
[root@devops-yanxiao-1-162 ~]# systemctl restart gitlab-runner
检查是否启动成功
[root@devops-yanxiao-1-162 ~]# systemctl status gitlab-runner
注册
[root@devops-yanxiao-1-162 ~]# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=55722 revision=76984217 version=15.1.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.1.162:9000 (我填的域名) # 填写gitlab的web-ui地址
Enter the registration token:
GR1348941__3BTxU_MVPU99sX2xVP # gitlab 上的token setting > CI/CD > Runners > Specific runners 就能看到
Enter a description for the runner:
[devops-yanxiao-1-162]: this a test runner
Enter tags for the runner (comma-separated):
test # tag标签,可以随意命名,我理解的是这个runner会按照标签拾取任务
Enter optional maintenance note for the runner:
回车就行
Registering runner... succeeded runner=GR1348941__3BTxU_
Enter an executor: custom, parallels, ssh, docker+machine, docker-ssh+machine, kubernetes, docker, docker-ssh, shell, virtualbox:
Shell # 注册executor的方式,这里选shell,试了ssh虽然成功了但是用不了也是被文档坑了,不过具体看自己的项目
检查gitlab-runner executor是否正常,登录gitlab
setting > CI/CD > Runners > Specific runners 看到图标是绿色则注册executor成功。
注:可以多注册runner来分担任务!
3、sonarqube安装
sonarqube安装9.5版本,需要jdk 11,安装在192.168.1.161服务器
官网下载地址:Download | SonarQube,包含有社区版,企业版等等,本文介绍社区版安装
将下载好的zip包上传并解压 放到自己想放的目录下
启动sonarqube 包含有elasticsearch,所以不能用root用户启动
# 创建用户,并用该用户启动
[root@devops-yanxiao-1-161 ~]# useradd sonarqube
[root@devops-yanxiao-1-161 ~]# passwd sonarqube
# 授权,更改所有权
[root@devops-yanxiao-1-161 ~]# chown -R sonarqube:sonarqube /usr/local/sonarqube
[root@devops-yanxiao-1-161 ~]# su sonarqube
[sonarqube@devops-yanxiao-1-161 root]$ /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
# 查看启动日志
[sonarqube@devops-yanxiao-1-161 root]$ tail -f /usr/local/sonarqube/logs/sonar.log
启动成功后默认账号密码:admin/admin
sonarqube支持在线搜索、安装插件
支持线下安装插件
线下下载好的插件jar,放入$SONAR_HOME/extensions/plugins目录中,然后重启sonarqube
4、sonar-scanner 安装
sonar-scanner和gitlab,gitlab-runner安装在同一台服务器
下载解压
[root@devops-yanxiao-1-162 ~]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
[root@devops-yanxiao-1-162 ~]# unzip sonar-scanner-cli-4.0.0.1744-linux.zip
[root@devops-yanxiao-1-162 ~]# mv sonar-scanner-cli-4.0.0.1744-linux /usr/sonar-scanner
配置环境变量
[root@devops-yanxiao-1-162 sonar-scanner]# vim /etc/profile
# 将SONAR_RUNNER_HOME添加到PATH中
export SONAR_RUNNER_HOME=/usr/sonar-scanner
export PATH=/usr/local/git/bin:$JAVA_HOME/bin:$SONAR_RUNNER_HOME/bin:$PATH
[root@devops-yanxiao-1-162 sonar-scanner]# source /etc/profile
[root@devops-yanxiao-1-162 sonar-scanner]# sonar-scanner --version
INFO: Scanner configuration file: /usr/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 4.0.0.1744
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-1160.el7.x86_64 amd64
[root@devops-yanxiao-1-162 sonar-scanner]#
配置连接sonarqube
[root@devops-yanxiao-1-162 conf]# vim /usr/sonar-scanner/conf/sonar-scanner.properties
# sonarqube url
sonar.host.url=http://192.168.1.161:9000
# 登录账号
sonar.login=admin
sonar.password=1234
sonar.sourceEncoding=UTF-8
测试
在gitlab上新建项目,并clone到windows环境,此步骤略
创建.gitlab-ci.yml文件
注意:.gitlab-ci.yml名字的.不能去掉,其次.gitlab.yml文件必须在项目的根目录,与src、pom.xml文件是同一目录
.gitlab.yml文件内容
stages:
- test
job1:
stage: test
only:
- main
script:
- sonar-scanner -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.host.url=http://192.168.1.161:9000 -Dsonar.login=admin -Dsonar.password=1234 -Dsonar.sources=. -Dsonar.java.binaries=. -Dsonar.java.source=11 -Dsonar.analysis.CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME
注:为了不暴露敏感信息我把上面的script下内容配置成shell脚本在gitlab服务器上,配置的可执行脚本要赋予gitlab-runner的用户权限才可以执行。
说明:
$CI_PROJECT_NAME获取项目的名字,
$CI_COMMIT_REF_NAME是push的分支名称
当触发push操作后,就能在gitlba 项目名称 > CI/CD > Pipelines 下看到任务在执行
有些群组的CI/CD--runner使用共享runner未开启如下图:
需要找到开启:管理员---群组---点击相应群组---点击管理权限就出现上面的图
共享的runner群组未开启就会导致项目无法使用共享的runner,开启群组的共享runner后项目还要手动开启为该项目开启共享runner
然后再提交代码就可以实现审核了
注:先了解下sonarqube的用法,部分代码审核后一些bug可能不是很重要,需要协商制定合理的代码审核标准,可以自定义配置规范,对不同项目可以对应不同组,分配权限
SonarQube 7.9以上版本已不再支持mysql
Sonarqube 8.0及之后的版本,LDAP插件就不支持了
Sonarqube 9.x版本下可以支持pdf分析报告生成插件