安装
直接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看看吧~