安装
直接docker-compose整起
version: '3'
services:
# 使用 PostgreSQL 作为 SonarQube 的持久化方案
# 注:由于 SonarQube 7.9 及之后的版本不支持 MySQL,因此 MySQL 不作为考虑对象
postgres:
image: postgres:12
container_name: sonarqube_postgres
privileged: true
ports:
- "5432:5432"
networks:
- sonarnet
restart: always
# 将 PostgreSQL 数据文件存放至宿主机
volumes:
- ./postgres:/var/lib/postgresql/data
environment:
POSTGRES_DB: sonar
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
sonarqube:
image: hub4rpi64/sonarqube:8.3.1.34397
#image: hub4rpi64/sonarqube:7community
container_name: sonarqube
privileged: true
ports:
- "9000:9000"
restart: always
networks:
- sonarnet
depends_on:
- postgres
# 将 SonarQube 日志文件、数据文件、配置文件、扩展插件存放至宿主机
volumes:
- ./data:/opt/sonarqube/data
- ./extensions:/opt/sonarqube/extensions
- ./logs:/opt/sonarqube/logs
- ./conf:/opt/sonarqube/conf
#- ./lib:/opt/sonarqube/lib
# 配置 SonarQube 的数据源,本例为 PostgreSQL
environment:
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/sonar?useUnicode=true&characterEncoding=utf8
# 由于 SonarQube 内部会启动 ElasticSearch,因此需要此配置
ulimits:
nproc: 65535
nofile:
soft: 65536
hard: 65536
networks:
sonarnet:
driver: bridge
由于是在arm架构部署,所以我用的镜像不是官方的,environment的变量与官方不同,需要注意
下载插件
中文插件
https://github.com/xuhuisheng/sonar-l10n-zh
对应版本自个找
gitlab插件
# 最高4.1.0
https://github.com/gabrie-allaigre/sonar-gitlab-plugin
# 4.2.0
https://github.com/javamachr/sonar-gitlab-plugin/releases/tag/4.2.0
对应版本自个找
分支插件
https://github.com/mc1arke/sonarqube-community-branch-plugin
对应版本自个找
配置插件
将插件放到extensions/plugins
目录下,重新启动sonarQube即可
注意:分支插件比较特殊,还需要将插件拷贝到容器的lib/common
中
docker cp sonarqube-community-branch-plugin.jar <容器id>:/opt/sonarqube/lib/common
也可以直接在docker-compose配置卷
volumes:
- ./sonarqube-community-branch-plugin.jar:/opt/sonarqube/lib/common/sonarqube-community-branch-plugin.jar
SonarQube控制台
配置质量规则
由于执行代码检测前需要有质量规则,不然鬼晓得怎么检测
在控制台:配置——> 应用市场
搜索插件:Java Code Quality and Security
, 安装
找不到直接搜索java, 找到描述是Code Analyzer for Java的
安装完重启sonarQube
控制台经常安装转圈圈,转着转着就没了,想知道插件是否在下载,进入sonar安装目录,extensions/downloads,可以看到.tmp的文件,
ll
命令查看文件大小,看看是不是一直在变
配置gitlab
控制台:配置->配置 -> gitlab
- 修改GitLab url
- gitlab user token
user token 生成方式:
http://{gitlab}/profile/personal_access_tokens
配置ALM
控制台:配置->配置 -> ALM -> gitlab
生成个人token: http://{gitlab}/profile/personal_access_tokens
生成appid 和secret: https://{gitlab}/oauth/applications/
配置回调地址: https://{sonar}/oauth2/callback/gitlab
需要先在通用配置中配置 serverBaseUrl:
https://{sonar}
安全审计插件(可选)
应用市场搜
- findBugs
- dependecy-check
新建项目
当与gitlab集成之后,并且开启了组同步功能,有关新增的用户与项目会自动划分的同名的群组下
新建群组
配置 -> 权限 -> 群组
配置权限模板
配置 -> 权限 -> 权限模板 -> 创建模板
填写项目标识,使用正则表达式,使得提交的项目与权限模板像匹配
新建项目
在控制台:右上角,点击+
号,新建项目
按照指示来就成
只需在第一次新建项目时使用,主要为了生成一个token,后续可以直接使用token推送项目
JAVA项目配置
配置maven插件
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.4</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
配置gitlab-ci
stages:
- sonarqube_analysis
- dependecy-check
variables:
APP_NAME: xxxx
SONAR_TOKEN: xxxx
SONAR_HOST_URL: http://ip:port
# 执行 SonarQube 分析,并将检测结果反馈至 GitLab
sonarqube_analysis:
stage: sonarqube_analysis
script:
- mvn --batch-mode verify -Dmaven.test.skip=true sonar:sonar -Dsonar.projectKey=$APP_NAME -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME -Dsonar.branch.name=$CI_COMMIT_REF_NAME -Dsonar.gitlab.project_id=$CI_PROJECT_ID
tags:
- xxx
依赖扫描
这个项目的依赖呀,都是人写的,人写的,就会有漏洞,怎么办,扫呗
- 在gitlab-runner的服务器中安装
denpendecy-check
https://github.com/jeremylong/DependencyCheck/
下个release,装就完啦,比如我下好解压在/opt/sonar目录下
- 配置runner的映射
由于我的ci是docker跑得,所以要有映射
打开runner配置文件:vim /etc/gitlab-runner/config.toml
在volumes项加个映射:/opt/sonar:/opt/sonar
配置ci
stages:
- dependecy-check
# 依赖扫描
dependecy-check:
stage: dependecy-check
script:
- mvn clean package -Dmaven.test.skip=true
- /opt/sonar/dependency-check/bin/dependency-check.sh -s xx.jar -f HTML -o ./java-sec-code-report.html
- mvn --batch-mode verify sonar:sonar -Dsonar.projectKey=$APP_NAME -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN -Dsonar.dependencyCheck.htmlReportPath=java-sec-code-report.html
when: manual
tags:
- xxx
依赖扫描需要装dependecy-check插件
现在,提交代码,跑个ci看看吧~