SonarQube 部署及使用
- 一、部署
-
- Server
-
- 简单使用(推荐)
- 从 Docker 镜像安装 SonarQube
- Docker Compose 配置示例
- Client
- 二、DevOps 平台集成
-
- 1. Local 使用
- 2. DevOps 平台集成(常用)
-
- 1. Gitlab-CI
- CI/CD配置模版
- 2. Jekins
- 常见问题
-
- 注意事项
一、部署
Server
简单使用(推荐)
$ docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
从 Docker 镜像安装 SonarQube
-
创建以下卷有助于防止在更新到新版本或升级到更高版本时丢失信息:
- sonarqube_data – 包含数据文件,例如嵌入式 H2 数据库和 Elasticsearch 索引
- sonarqube_logs – 包含有关访问、Web 进程、CE 进程和 Elasticsearch 的 SonarQube 日志
- sonarqube_extensions – 将包含您安装的任何插件和必要时的 Oracle JDBC 驱动程序。
使用以下命令创建卷:
$> docker volume create --name sonarqube_data $> docker volume create --name sonarqube_logs $> docker volume create --name sonarqube_extensions
-
已提供支持的数据库(Oracle 除外)的驱动程序。如果您使用的是 Oracle 数据库,则需要将 JDBC 驱动程序添加到sonar_extensions卷中。去做这个:
- 使用嵌入式 H2 数据库启动 SonarQube 容器:
$ docker run --rm \-p 9000:9000 \-v sonarqube_extensions:/opt/sonarqube/extensions \<image_name>
- 一旦 SonarQube 正常启动就退出
- 将 Oracle JDBC 驱动程序复制到
sonarqube_extensions/jdbc-driver/oracle
.
-
使用使用 -e 环境变量标志定义的数据库属性运行映像:
$> docker run -d --name sonarqube \-p 9000:9000 \-e SONAR_JDBC_URL=... \-e SONAR_JDBC_USERNAME=... \-e SONAR_JDBC_PASSWORD=... \-v sonarqube_data:/opt/sonarqube/data \-v sonarqube_extensions:/opt/sonarqube/extensions \-v sonarqube_logs:/opt/sonarqube/logs \<image_name>
Docker Compose 配置示例
version: "3"services:sonarqube:image: sonarqube:communitydepends_on:- dbenvironment:SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_JDBC_PASSWORD: sonarvolumes:- sonarqube_data:/opt/sonarqube/data- sonarqube_extensions:/opt/sonarqube/extensions- sonarqube_logs:/opt/sonarqube/logsports:- "9000:9000"db:image: postgres:12environment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonarvolumes:- postgresql:/var/lib/postgresql- postgresql_data:/var/lib/postgresql/datavolumes:sonarqube_data:sonarqube_extensions:sonarqube_logs:postgresql:postgresql_data:
Client
目标设备安装 SnoarQube Scanner
访问Scanner官方文档 下载最新版本,并将bin目录添加到PATH环境变量中,即可运行
# https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
# 选择下载类型 Linux
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip# 解压到指定目录
unzip sonar-scanner-cli-4.6.2.2472-linux.zip -d /usr/local/# 重命名文件夹(或 通过Linux软连接映射)
# ln -s [源文件或目录] [目标文件或目录]
mv sonar-scanner-cli-4.6.2.2472-linux sonar-scanner# 添加环境变量
vi ~/.bashrc
export SONAR_SCANNER_HOME=/usr/local/sonar-scanner
export PATH=${SONAR_SCANNER_HOME}/bin:${
PATH} # 应用环境变量 使其生效
source ~/.bashrc
在你的项目根目录中(二选一,运行参数)
- 配置文件:创建一个名为的配置文件
sonar-project.properties
- 运行时指定
配置文件或运行时参数需包含以下内容
sonar.projectKey=${项目对应的 Key}
sonar.projectName=${项目对应的 名称}
sonar.projectVersion=${项目对应的 版本} # 1.0
sonar.sources=./
sonar.host.url=${ServerIP} # http://10.200.3.96:9201
sonar.login=${LoginToken for Sonar}# 选填
sonar.exclusions=**/*.xml,**/*.html # 排除不需要检测的文件,如:xml、html
sonar.language= ${Code 语言} # python java ...
# 语言不配置则 使用多语言扫描
sonar.sourceEncoding=UTF-8
sonar.java.binaries=.
二、DevOps 平台集成
1. Local 使用
- 选择 Local 方式
- 创建该项目对应的 新Token 或使用已有的Token (方便扫描目标与项目对应)
- 选择目标设备系统类型 下载 SonarScanner
- 将bin目录添加到
PATH
环境变量中
执行命令完成扫描(选择系统后 会有需执行命令提示,复制执行就行)
-
Linux
sonar-scanner \-Dsonar.projectKey=test \-Dsonar.sources=. \-Dsonar.host.url=http://10.200.3.96:9201 \-Dsonar.login=f8b69e29396d703eca16928ef614331165e514ae
-
Windows
sonar-scanner.bat -D"sonar.projectKey=test" -D"sonar.sources=." -D"sonar.host.url=http://10.200.3.96:9201" -D"sonar.login=f8b69e29396d703eca16928ef614331165e514ae"
2. DevOps 平台集成(常用)
登录Snoar平台,创建项目后,选择对应的集成方式
如选择 Gitlab-CI 会有对应的配置教程
1. Gitlab-CI
必须安装 Gitlab runner
安装配置
-
安装Gitlab runner
包安装
# 离线安装 # ${arch} e.g. amd64, arm, arm64 curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_${arch}.deb" dpkg -i gitlab-runner_<arch>.deb # apt 在线安装 apt install gitlab-runner
使用二进制文件
# 1. Linux x86-64 下载二进制文件 sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64" # 2. 赋予其执行权限 sudo chmod +x /usr/local/bin/gitlab-runner # 3. 创建一个 GitLab CI 用户 sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash # 4. 安装并作为服务运行 sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner # 5. 启动服务 start stop restart sudo gitlab-runner start
确保您有
/usr/local/bin/
在$PATH
根或者你可能会得到一个command not found错误。或者,您可以安装gitlab-runner在不同的位置,例如/usr/bin/
. -
根据提示 使用
管理员登录>Settings > CI/CD > Variables
进行相应的设置设置GitLab 环境变量
定义 SonarQube Token 环境变量:
SONAR_TOKEN 值为$UserToken
取消选中“保护变量” 选中“掩码变量”
定义 SonarQube URL 环境变量
SONAR_HOST_URL 值为$UserUrl
Sonar 服务器ip
-
Gitlab CI/CD
.gitlab-ci.yml
配置官方
sonarqube-check:image: name: sonarsource/sonar-scanner-cli:latestentrypoint: [""]variables:SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cacheGIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis taskcache:key: "${CI_JOB_NAME}"paths:- .sonar/cachescript: - sonar-scannerallow_failure: trueonly:- master # or the name of your main branch
CI/CD配置模版
#定义 stages(阶段),任务根据这里的顺序执行 stages:- begin- test- done# 定义job(任务),多个任务分开定义 begin-job: #阶段,取自开始的stagesstage: begin # 流水线 >>>>> 作业开始script:- echo "开始流水线作业..."# 流水线开始作业 sonar-job: # sonar 检测stage: test #定义该job执行的脚本#注意-Dsonar.host.url 是sonarqube服务器地址#-Dsonar.login 是sonarqube服务器地址账号#-Dsonar.password 是sonarqube服务器地址密码# login password 可以用 -Dsonar.login 替换#-Dsonar.java.binaries=. # sonar4.12版本之后,分析java代码需要提供该参数script:- echo "运行 sonar-scanner 检测."- sonar-scanner -Dsonar.projectKey=root_test_AX23BxXP5as3koBVETLy -Dsonar.sources=. -Dsonar.host.url=http://10.200.3.96:9201 -Dsonar.login=489e90be98a600b4868dd6072281877344eee348 -Dsonar.java.binaries=.- echo "检测完成"tags: #标签,只有这个标签的runner才会执行任务;在gilab-runner注册时填写的tag-list# 如果仅用于个人 可以设置Runner的tags为空- sonar when: alwaysallow_failure: true # 是否允许失败only: # 只有指定的分支提交才会执行- main # 分支名称 mian/masterdone-job:stage: done # 流水线作业 >>>>> 结束script:- echo "运行完成"
2. Jekins
-
安装适用于 Jenkins 的 SonarQube 扫描仪插件 - 版本 2.11 或更高版本
自动安装(推荐)
手动在Jenkins服务器 通过终端安装(参考Linux 安装)并设置SONAR_RUNNER_HOME
为 $install_directory -
指定 Sonar服务端(系统配置)
-
Jenkins 配置项目
sonar.projectKey=root_test_AX23BxXP5as3koBVETLy sonar.projectName=test sonar.projectVersion=1.0 sonar.sources=./ sonar.host.url=http://10.200.3.96:9201 sonar.language=python sonar.sourceEncoding=UTF-8 sonar.login=489e90be98a600b4868dd6072281877344eee348 sonar.java.binaries=.
运行成功
常见问题
1. Gitlab 流水线一直处于等待状态
重启 Gitlab runner:gitlab-runner restart
注意事项
- gitlab社区版,只能对main/master分支代码进行分析
.gitlab-ci.yml
的脚本,要有参数-Dsonar.java.binaries=.
否则报错