- docker-compose 安装sonarqube和postgres数据库,挂载的目录需提前创建好
version: '3.6'
postgres:
image: postgres:latest
container_name: postgres
restart: always
ports:
- 5432:5432
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=Sonar12#$
- POSTGRES_DB=sonarqube
volumes:
- ./postgres/postgresql:/var/lib/postgresql
- ./postgres/postgresql_data:/var/lib/postgresql/data
sonarqube:
image: sonarqube:latest
container_name: sonarqube
restart: always
ports:
- 9000:9000
depends_on:
- postgres
environment:
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=Sonar12#$
- SONARQUBE_JDBC_URL=jdbc:postgresql://postgres:5432/sonarqube
volumes:
- ./sonarqube/conf:/opt/sonarqube/conf
- ./sonarqube/data:/opt/sonarqube/data
- ./sonarqube/extensions:/opt/sonarqube/extensions
networks:
gitlab:
external: true
-
进入snoarqube页面,初始账号/密码是admin/admin,需要自己修改。重点是sonarqube community版本不支持多分支扫描,这里需要安装插件,并配置sonarqube。
插件下载地址:github.com/mc1arke/son…
下载sonarqube-community-branch-plugin-1.22.0.jar,下载后拷贝到服务器的/sonarqube/extensions/plugins/的目录下,有必要chmod 777 刚刚考入的文件。
重点,配置sonarqube的配置文件,在/sonarqube/conf/目录中创建配置文件,sonar.properties,并配置如下,记得改版本号
sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.22.0.jar=web
sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.22.0.jar=ce
配置好后,重启容器,或者在web界面点击重启
docker restart sonarqube
然后讲讲为什么要做这个配置?
如果不做sonar.properties的配置,后续在sonar-scanner生成报告后upload上传报告的时候会出现错误{"errors":[{"msg":"Current edition does not support branch feature"}]},也就是不支持多分分支,提交失败,所以这步必须配置使插件生效
重启后,安装好的插件,在sonarqueb页面的插件,已安装中可以看到
-
在Ubuntu中安装Sonar-Scanner
Sonar-Scanner下载地址:binaries.sonarsource.com/?prefix=Dis…
下载:sonar-scanner-cli-6.2.1.4610-linux-x64.zip,解压拷贝到opt目录
wget https://binaries.sonarsource.com/?prefix=Distribution/sonar-scanner-cli/sonar-scanner-cli-6.2.1.4610-linux-x64.zip
unzip sonar-scanner-cli-6.2.1.4610-linux-x64.zip
sudo mv sonar-scanner-cli-6.2.1.4610-linux-x64 /opt/sonar-scanner
设置环境变量
# 查看是否有这个文件
ls -a ~ | grep .bashrc
# 没有则创建一个
touch ~/.bashrc
# 写入配置
sudo nano ~/.bashrc
配置内容如下:
export SONAR_SCANNER_HOME=/opt/sonar-scanner
export PATH=$PATH:$SONAR_SCANNER_HOME/bin
保存后,执行以下命令使配置生效,并添加软链接否则sonar-scanner指令将执行失败
source ~/.bashrc
# 将 sonar-scanner链接到 /usr/local/bin
sudo ln -s /opt/sonar-scanner/bin/sonar-scanner /usr/local/bin/sonar-scanner
- Gitlab中配置
创建账号SonarQube账号,用于给sonarqube拉代码,访问权限设为普通即可,这里你那个项目组需要执行代码分析的就吧SonarQube添加的群组或者项目中即可,之后再sonarqube页面便可导入
登录SonarQube账号,创建 GitLab OAuth app(将GitLab用作OAuth提供程序的应用程序)
创建应用后要记住这两个参数
分配令牌,一会用于配置sonarqube,创建令牌后一定要记住分配的令牌
- 配置Sonarqueb
在配置-ALM集成中,配置好后可以检查配置是否正确
从Gitlab导入项目
选择需要导入的项目,导入后在项目页即可看到该项目
创建令牌,这个令牌是给Gitlab提交报告用的,要记住
- 在Gitlab中的项目CI/CD中创建变量SONARQUBE_TOKEN,记住:不要设置为受保护的变量,否则CI的时候拿不到变量
- 配置Gitlab-ci.yaml
这里在CI的时候我暂时设置为手动触发,方便调试,调好后根据自己的需要来实现质量门限之类的
在你的项目中创建sonar-project.properties文件,内容如下
sonar.projectKey=<你自己的projectKey>
sonar.qualitygate.wait=false
# Ensure no branch-related properties are set
sonar.branch.name=
sonar.branch.target=
projectKey在哪里?导入项目的时候这个页面
在gitlab-ci中,我打印了SONARQUBE_TOKEN变量、配置了SCANNER_HOME,GIT_DEPTH: "1"是main分支,0是所有分支
stages:
- sonar
- build
- deploy
sonar-job:
stage: sonar
image:
name: sonarsource/sonar-scanner-cli:latest
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # 定义分析任务缓存位置
GIT_DEPTH: "1" # 告诉git获取项目所有分支,这是分析任务所必须的
SCANNER_HOME: "/opt/sonar-scanner"
script:
- echo "SONARQUBE_TOKEN is $SONARQUBE_TOKEN"
- ls -la /opt/sonar-scanner
- ls -la /usr/local/bin
- which sonar-scanner
- sonar-scanner -Dsonar.projectKey=<你的projectKey> -Dsonar.host.url=http://192.168.1.11:9000 -Dsonar.login=$SONARQUBE_TOKEN
allow_failure: true
only:
- main # 或者主分支
when: manual # 增加手动触发流水线设置
8. 提交代码,作业中执行sonar-job
执行过程如下,upload了报告,就分析完成了
在sonarqube这个项目的页面可以看到详细的分析报告
- 至此已完成,请小伙伴多多支持,谢谢