从零开始部署Android项目的代码质量检测工具Sonarqube(Win环境、Docker,基于Jenkins)
从零开始部署Android项目的Sonarqube
前言
环境和要求
系统环境:win11
配置要求:能跑得动文中服务总和的内存
软件环境:Docker desktop。https://www.docker.com/products/docker-desktop/
网络环境:有办法上外网下载容器和所需要的服务。
注意
本文是从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win系统)-CSDN博客的后续文章,也是docker项目构建的第二篇。
说明
在本文中,如无特殊说明,所有需要输入指令的地方都为docker.desktop终端的terminal(其实就是powerShell),下图红框处点一下即可打开。输入docker,没有出现报错时,就算准备完成了。如果出现报错,检查一下你的环境变量是否有把docker加进去,这部分请百度解决。
1. 容器部署
1.1 docker-compose.yml
部署Sonarqube也需要一个Sonarqube专门的数据库,并且按照官方的说法,现在已经不推荐使用MySql作为Sonarqube的数据库了,建议使用PostgreSQL。
本次我们还是使用docker-compose.yml的方式构建容器。
- 随便找一个你用来放置配置文件的文件夹,新建一个也行,比如D:/docker/SonarqubeConfig。
- 新建一个文件,名称为
docker-compose.yml,然后用txt的方式打开它。 - 把我们所需要的所有服务和连通网络都写到这个文件里面,把以下文件的内容复制进去。文件看着很长大一串,但是不要担心,这些内容你只需要复制进docker-compose.yml文件即可,除了最底下的network部分以外不需要做任何修改。
services:
sonarqube-db:
image: ${POSTGRES_IMAGE_TAG}
container_name: ${POSTGRES_CONTAINER_NAME}
restart: unless-stopped
networks:
- ${EXTERNAL_NETWORK}
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data/pgdata # 明确指定数据目录:cite[3]
volumes:
# 使用绑定挂载,将数据直接存储在主机自定义路径下
- ${HOST_BASE_PATH}/postgres/data:/var/lib/postgresql/data
- /etc/localtime:/etc/localtime:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
sonarqube:
image: ${SONARQUBE_IMAGE_TAG}
container_name: ${SONARQUBE_CONTAINER_NAME}
restart: unless-stopped
depends_on:
sonarqube-db:
condition: service_healthy
networks:
- ${EXTERNAL_NETWORK}
environment:
SONAR_JDBC_URL: jdbc:postgresql://${POSTGRES_CONTAINER_NAME}:5432/${POSTGRES_DB}
SONAR_JDBC_USERNAME: ${POSTGRES_USER}
SONAR_JDBC_PASSWORD: ${POSTGRES_PASSWORD}
SONAR_WEB_JAVAOPTS: ${SONARQUBE_WEB_JAVA_OPTS}
volumes:
# 将SonarQube的数据、扩展插件和日志目录挂载到主机自定义路径
- ${HOST_BASE_PATH}/sonarqube/data:/opt/sonarqube/data
- ${HOST_BASE_PATH}/sonarqube/extensions:/opt/sonarqube/extensions
- ${HOST_BASE_PATH}/sonarqube/logs:/opt/sonarqube/logs
- /etc/localtime:/etc/localtime:ro
ports:
- "${SONARQUBE_HOST_PORT}:9000"
networks:
gitsystem_ci-network:
external: true
接下来回到docker.desktop,输入以下指令,看一下你的gitea和jenkins所在的网络是哪个,像图中就是 gitsystem_ci-network。
这个网络一定要自己查一下,因为他会根据你之前的docker-compose.yml所在文件夹的名字而不一样的。
docker network ls

搜索完之后,把上面networks中的名字改成你的结果,文章中为gitsystem_ci-network。
1.2 .env
在docker-compose.yml的所在文件夹下,新建一个文件.env,然后用txt的方式打开,将以下内容复制进去。
# .env 环境配置文件
# 核心路径配置:请修改 HOST_BASE_PATH 为您自定义硬盘上的真实路径
HOST_BASE_PATH=D:\docker\SonarQube
# SonarQube 服务配置
SONARQUBE_CONTAINER_NAME=sonarqube
SONARQUBE_IMAGE_TAG=sonarqube:lts-community
SONARQUBE_HOST_PORT=9000
SONARQUBE_WEB_JAVA_OPTS=-Xmx512m -Xms128m
# PostgreSQL 数据库配置
POSTGRES_CONTAINER_NAME=sonarqube-db
POSTGRES_IMAGE_TAG=postgres:15
POSTGRES_DB=sonarqube
POSTGRES_USER=sonar
POSTGRES_PASSWORD=your password here
# 网络配置
EXTERNAL_NETWORK=gitsystem_ci-network
绝大部分配置你都不需要关心,重点看这几个:
- HOST_BASE_PATH:你用来保存Sonarqube相关数据的文件夹,改成你的。
- POSTGRES_PASSWORD:改成你的数据库密码,后续会用到。
- EXTERNAL_NETWORK:改成上文你获取的gitea所在的网络,文中为gitsystem_ci-network
1.3 部署容器
最后在docker.desktop输入终端指令进入该文件夹,然后部署容器
cd D:\docker\SonarQube
docker compose up -d
终端显示以下内容就算部署成功了。
PS D:\docker\config\SonarQube> docker compose up -d
[+] Running 2/2
✔ Container sonarqube-db Healthy 11.4s
✔ Container sonarqube Started
2. Sonarqube基础配置
2.1 账号
第一次进入sonarqube,他会要你输入账号密码,第一次进入时账号密码都是admin。
进入之后他会要你修改密码,修改一下即可进入。
2.2 中文插件
接下来为了方便我们后续的配置,先把必要的中文插件装上吧,在管理员账号的主界面点击上方的administration,然后点击Marketplace。
先点击页面上的 I understand the risk,然后搜索Chinese,把chinese pack安装后重启即可。
3. Jenkins部署sonarqube扫描功能
我们想在jenkins配置sonarqube的话,需要以下几个东西,先列出来然后一个个说怎么配置。
- sonarqube安全令牌:这个东西用于授权给jenkins让他有资格访问sonarqube。
- jenkins的sonarqube插件:这个就不多说了,插件必须要。
- jenkins的sonarqube scanner:插件带来的具体的扫描器。
- jenkins配置文件,我们这里先写在项目中方便使用。
3.1 sonarqube安全令牌
首先把安全令牌的事解决,还是在sonarqube的管理员首页。
点击右上角的角色头像->我的账号->安全->生成一个令牌,名称随便填,类型全局分析令牌就行。然后把这个安全令牌复制下来先找个地方放即可。
3.2 jenkins配置
这里我们默认jenkins已经安装了中文插件,没有安装的可以先去装一下,下文描述的按钮均以中文为准。
3.2.1 插件配置
登录jenkins的管理员账号,进入系统管理界面->插件管理,把SonarQube Scanner for Jenkins下载下来,下完之后记得重启。
3.2.2 系统环境
重启之后继续登录管理员账号,系统管理->系统配置,往下拖,会有个SonarQube Server。
- Name随便填
- Server URL固定填:http://sonarqube:9000
- Server authentication Token右侧有个添加按钮,选好凭据提供者之后,类型选择Secret text,
- secret字段中填入我们的sonar安全令牌,
- ID空着不填
- 描述随便写写,就是这个key对应的名称了,写个自己能记得住的。

3.2.3 Sonarqube scanner
回到系统管理页面->全局工具配置,找到SonarQube Scanner这一行,新增一个安装,名称可以随便填(文中为default-sonar-scanner),不过后续要用上,版本直接选个最新的就行,然后把自动安装勾选上保存应用。
3.2.4 Jenkinsfile配置
最后回到Android项目根目录,新建一个文件Jenkinsfile,先把以下内容复制进去,然后我会告诉你哪些参数是需要替换的。
pipeline {
agent any // 使用任何可用的Jenkins节点
stages {
stage('Checkout Code') {
steps {
echo '开始拉取代码...'
// 替换为您的Gitea仓库地址和凭据ID
git branch: 'sonarqubebranch',
credentialsId: '8c50609a-4cbc-454e-96fe-0ee6134d9f11',
url: 'http://192.168.31.39:3000/wodongx123/AqDemo.git'
}
}
stage('Checkout') {
steps {
checkout scm
}
}
stage('SonarQube Analysis') {
environment {
// 'default-sonar-scanner' 需要与你在全局工具配置中设置的 Scanner 名称一致
scanner = tool 'default-sonar-scanner'
}
steps {
withSonarQubeEnv('my-sonarqube') {
sh """
${scanner}/bin/sonar-scanner \
-Dsonar.projectKey=testProject \
-Dsonar.projectName=测试项目 \
-Dsonar.sources=.
"""
}
}
}
}
}
- Check out Code:
- git branch:这个不用多说了,你需要分析哪个分支的代码就写哪个分支。
- credentialsId:这是jenkins的凭据,没有的话见上篇文章的第五节,生成的id填入这里。
- url:你的git仓库地址。
- SonarQube Analysis:
- scanner:我们在3.2.3节中设置的sonarqube scanner的名称填入这里。
- withSonarQubeEnv:我们在3.2.2节中设置的环境变量的Name。
- projectKey:这个是你到时候扫描结束之后sonarqube中的项目id,可以随便取,但是不要和已经有的项目重复了。
- projectName:key对应的名称,随便取。
文件写完之后,代码提交到git仓库上。
3.2.5 jenkins流水线配置
回到jenkins,新建一个任务,名称随便取,类型选流水线。
页面下拉找到定义这里,选择Piprline Script from SCM
- SCM选择git
- Repository URL把你的git仓库地址填进来(.git结尾的那个)
- Credentials:这个时候你也应该有了,直接选择,没有的话见上篇文章的第五节
- 分支改成想要进行sonarqube分析的分支。
保存后运行,不出意外的话应该是成功了。
更多推荐


所有评论(0)