部署 SonarQube
推荐的部署方式有两种,二进制和容器,推荐使用容器化部署,方便维护和处理,下面将以容器部署为例。
大部分系统的自带参数并不能满足要求,创建配置文件并重启(容器化);
# /etc/sysctl.d/99-sonarqube.conf vm.max_map_count=524288 fs.file-max=131072
# /etc/security/limits.d/99-sonarqube.conf sonarqube - nofile 131072 sonarqube - nproc 8192
创建空文件夹并创建 compose.yaml 文件;
services: sonarqube: image: sonarqube:lts-community depends_on: - db environment: SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar SONAR_JDBC_USERNAME: sonar SONAR_JDBC_PASSWORD: sonar restart: unless-stopped volumes: - sonarqube_data:/opt/sonarqube/data - sonarqube_extensions:/opt/sonarqube/extensions - sonarqube_logs:/opt/sonarqube/logs ports: - "0.0.0.0:9000:9000" db: image: postgres:15-alpine environment: POSTGRES_DB: sonar POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar restart: unless-stopped volumes: - postgresql:/var/lib/postgresql - postgresql_data:/var/lib/postgresql/data volumes: sonarqube_data: sonarqube_extensions: sonarqube_logs: postgresql: postgresql_data:
小贴士:其中 PostgreSQL 支持 11/12/13/14/15,可以根据需求更换版本号。
安装 Docker Engine 及配套插件,安装后执行命令创建容器。
docker compose up -d
等待容器启动后访问 9000 端口即可看到 WebUI,使用用户名密码登录(默认都是admin)即可,然后会提示修改密码。
在 Administration -> System 中可以看到系统状态和所有服务的状态
生成访问令牌
外部的服务调用 SonarQube 是需要验证的,但是还不想使用用户密码进行授权,可以使用 Token 进行授权来进行代码检测的工作,可以防止泄漏用户名和密码。
如果准备长期使用的话,第五步需要将其修改为 No expiration
(永不过期),创建完成后令牌只会显示一次,注意提前复制备份令牌字符串。
部署 SonarScanner
在 SonarScanner 官方文档的最上面有二进制包的下载地址:
以当前最新版 4.8 为例 sonar-scanner-cli-4.8.0.2856-linux.zip
sudo unzip sonar-scanner-cli-4.8.0.2856-linux.zip -d /opt/
小贴士:需要注意的是,这个扫描工具需要安装在 Jenkins 的工作节点中,如果主节点没有 executors ,那么需要将 SonarScanner 安装至实际的执行器所在的工作节点主机中。
然后修改配置文件,在 conf/sonar-scanner.properties
中,只需要修改 sonar.host.url
的值,指向正确的地址即可。
#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://172.16.16.203:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
配置项目
然后就可以对项目进行配置接入,首先安装 SonarQube Scanner for Jenkins 插件,安装完毕后重启 Jenkins。
然后在 Dashboard -> Manage Jenkins -> System
中配置 SonarQube servers
,需要配置的项目有名称、地址、和验证 Token。
根据不同种类的项目,配置的方法也不尽相同:
如果是自由风格的项目,需要在 Build Steps 里添加一个步骤(注意需要在 Maven 构建步骤后,否则无法进行代码检测)
如果是流水线的项目,需要使用语法生成器进行生成语句(其实没有原生语句,都是执行 shell 命令),替换其中的参数即可
stage('CodeCheck via SonarQube') { steps { sh '''/opt/sonar-scanner-4.8.0.2856-linux/bin/sonar-scanner \\ -Dsonar.projectKey=${JOB_NAME} \\ -Dsonar.projectName=${JOB_NAME} \\ -Dsonar.projectVersion=${BUILD_NUMBER} \\ -Dsonar.java.binaries=target \\ -Dsonar.login=squ_d515c5752ba7c7862241c6463600309019981d90 ''' } }
补充一下其中的参数说明:
参数 | 说明 |
---|---|
sonar.projectKey | 项目 ID,为了区分项目 |
sonar.projectName | 项目名称,仅展示用 |
sonar.projectVersion | 项目版本,为了区别构建 |
sonar.java.binaries | 可执行文件路径,构建后进行测试的可执行文件路径 |
sonar.login | 登录验证,直接使用令牌或者用户名、密码形式 |
如果不配置 sonar.projectVersion
参数,会导致混淆,配置后可以在构建日志中看到每次构建(对应 Jenkins 的构建号 #xx)对应的问题:
手动检测
如果某个项目想单独跑一次测试,可以直接在命令行执行命令(注意替换 testProject 名)
/opt/sonar-scanner-4.8.0.2856-linux/bin/sonar-scanner \
-Dsonar.projectKey=testProject \
-Dsonar.projectName=testProject \
-Dsonar.java.binaries=target \
-Dsonar.login=squ_d515c5752ba7c7862241c6463600309019981d90
附录
参考链接
- How to Integrate SonarQube with Jenkins - TatvaSoft
- Analysis parameters - SonarQube Docs
- SonarScanner - SonarQube Docs
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-08-04 16:28 PM