实现逻辑:提交代码后,gitlab中CI执行,对代码进行静态扫描,将扫描结果同步到Sonarqube。
服务端安装环境
- centos 7
- gitlab-ce-14.0.0-ce.0.el7.x86_64(已安装,访问地址 http://1.1.1.2:8888)
- gitlab-runner-14.0.0_amd64 (安装在gtilab服务器上,建议保持版本一致)
- sonar-scanner-cli-4.6.2.2472-linux (安装在gitlab服务器上)
- git 2.31.1 (gitlab服务器上,centos7自带1+的版本,需要升级,否则后续报错)
- sonarqube 9.0(已安装,访问地址 http://1.1.1.1:9000)
gitlab-runner的安装配置
官方安装指导参考 Install GitLab Runner manually on GNU/Linux | GitLab
离线安装方式:下载地址 GitLab Runner bleeding edge releases | GitLab
选择对应平台的文件后放到服务器上,执行安装命令 yum install gitlab-runner_amd64.rpm
安装完成后执行注册,命令 gitlab-runner register
根据提示需要提供gitlab的服务地址,gitlab-ci的Token(登录gitlab系统后,进入项目-设置-CI/CD-Runner选项展开可找到),还需提供的信息有 description(这个runner的描述信息),tag-list(标签,gilab-ci配置的时候会用到,支持多个,逗号隔开),executor(执行器,这里选shell)
一步步执行完,注册成功后刷新gitlab页面,就可以看到运行中的runner(点击编辑可进行修改,就是对注册runner时填的信息进行修改)
sonar-scanner的安装配置
下载sonar-scanner,地址 SonarScanner | SonarQube Docs
传到服务器上后,解压到指定目录 unzip sonar-scanner-cli-4.6.2.2472-linux.zip -d /usr/local/,
修改/usr/local/sonar-scanner/conf/sonar-scanner.properties 文件
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://1.1.1.1:9000
sonar.login=admin
sonar.password=123456
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
#数据库连接
sonar.jdbc.url=jdbc:postgresql://x.x.x.x:5432/sonarqube
#数据库用户名
sonar.jdbc.username=sonar
#数据库密码
sonar.jdbc.password=sonar
(数据库连接可能不需要,待后续验证)
配置环境变量 vi /etc/profile,在最后添加两行内容
export SONAR_SCANNER_HOME=/usr/local/sonar-scanner
export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}
退出(按esc,输入:wq!然后回车),运行 source /etc/profile 使其生效。
运行sonar-scanner -v输出版本号,验证安装正确。
集成
项目根目录新建一个.gitlab-ci.yml文件,内容如下
#定义 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://1.1.1.1:9000 -Dsonar.login=admin -Dsonar.password=123456
#标签,只有这个标签的runner才会执行任务;在gilab-runner注册时填写的tag-list
tags:
- sonar
when: always
#只有指定的分支提交才会执行
only:
- master
代码提交后,到gitlab系统中项目CI/CD>>>作业,就可以看到运行中的任务,点击Status可进入日志窗口
待提示Job succeeded,进入sonarqube系统,即可查看到项目分析结果
gitlab社区版,只能对main/master分支代码进行分析(踩坑点)。
建议gitlab-runner和gitlab保持一致,之前安装runner,注册成功了,但死活没有job输出。
.gitlab-ci.yml的脚本,要有参数 -Dsonar.java.binaries=. 否则报错(踩坑点)