一丶背景
个人学习docker集成sonarqube的搭建
二丶版本选择及其下载地址
sonarqube:latest(截止目前为止,最高版本为8.9)
postgres:12.3
详情请参照官方文档。sonarqube 8.9版本不支持mysql,支持jdk11,集成的sonarqube-scanner支持jdk8
三丶postgres的安装
- 拉取镜像
docker pull postgres:12.3
- 启动容器
docker run -d --name postgres -p 5432:5432 -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar postgres:12.3
- 通过sql连接工具连接postgres。创建数据库sonar,为了后续的sonarqube启动指定数据库的数据做准备。
CREATE USER sonar WITH PASSWORD 'sonar';
GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;
- 将数据库 sonar 权限授权于 sonar
但此时用户还是没有读写权限,需要继续授权表
GRANT ALL PRIVILEGES ON all tables in schema public TO sonar;
四丶sonarqube的安装
- 拉取镜像
docker pull sonarqube
- 启动容器
- sonarqube内部集成了es。所以不能用root用户启动,此时需要添加个额外的用户
sudo docker run \
-d \
--name sonar \
-p 9000:9000 \
--link postgres \
-e SONARQUBE_JDBC_URL=jdbc:postgresql://postgres:5432/sonar \
-e SONARQUBE_JDBC_USERNAME=sonar \
-e SONARQUBE_JDBC_PASSWORD=sonar \
-v sonarqube_conf:/opt/sonarqube/conf \
-v sonarqube_extensions:/opt/sonarqube/extensions \
-v sonarqube_logs:/opt/sonarqube/logs \
-v sonarqube_data:/opt/sonarqube/data \
sonarqube:latest
- 查看容器启动是否启动成功
docker ps
- 如果启动未找到对应的容器,可以查看容器启动日志
docker logs -f --tail=30 containerName
- 启动成功之后就可以访问 http://localhost:9000/ 初始用户/密码:admin/admin
当然这里我自己已经提前装了汉化版,你的是英文的。不要慌,在同样的位置搜索chinese pack
安装之后系统会提示重启,重启之后就可以了。
五丶sonqube-scanner的安装及其使用 -
docker-scanner下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/
- 上传,解压
- 配置环境变量 /etc/profile
#JAVA
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
#sonar-scaner
SONAR_SCANNER_HOME=/data/tools/sonar-scanner
export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}
3.验证安装
[root@localhost ~]# sonar-scanner -v
INFO: Scanner configuration file: /data/tools/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.6.2.2472
INFO: Java 11.0.11 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-957.el7.x86_64 amd64
修改sonarqube-scanner的配置文件
#----- Default SonarQube server
sonar.host.url=http://ip:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
sonar.jdbc.url=jdbc:postgresql://ip:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
六丶项目的实际运用
方案一
最简单的就是直接在sonarqube直接创建手工项目,配置token
直接复制下方的内容在项目根目录直接运行即可
mvn sonar:sonar \
-Dsonar.projectKey=test \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=c20b8378365aa56354812bb7ade02eb1c6c4867
方案二
配合maven,使用scanner
- 修改本地的maven的配置settings文件
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>F:\person\repository</localRepository>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 配置 Sonar Host地址,默认:http://localhost:9000 -->
<sonar.host.url>http://localhost:9000</sonar.host.url>
<sonar.login>admin</sonar.login>
<sonar.password>admin</sonar.password>
</properties>
</profile>
</profiles>
</settings>```
- 项目文件中添加插件
```java
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.9.0.2155</version>
</plugin>
- 打开项目根目录执行mvn sonar:sonar
- 此时查看sonarqube,项目状态
方案三集成jekins
这里使用的是jenkinsci/blueocean,搭建过程可以查看jenkins的搭建 - https://www.jb51.net/article/196239.htm
- 安装SonarQube Scanner插件
- 在sonarqube中生成一个token,为了jenkins的免密认证。生成token在用户–>我的账号—>安全下
- 然后,在Jenkins中配置连接sonarqube服务器的地址,这里用到的token就是刚才在sonarqube中创建的那个token
系统管理—》全局设置
- 接着在Jenkins中配置连接sonarqube服务器的地址,这里用到的token就是刚才在sonarqube中创建的那个token
在Jenkins中的系统配置中设置SonarQube servers的token
-
在Jenkins中的全局配置中安装SonarQube servers
-
在Jenkins中的全局配置中安装JDK
-
创建任务
-
配置GIT的配置
-
构建环境
sonar.projectKey=${JOB_NAME}
sonar.sources=.
sonar.projectName=${JOB_NAME}
sonar.projectVersion=${BUILD_VERSION}
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
sonar.java.binaries=$WORKSPACE 这个很重要
-
配置定时任务构建
-
构建历史当中我们可以查看项目构建状态以及实时控制台输出
-
返回sonarqube当中 可以查看刚才自动构建的任务
-
解决jenkins的时间服务器时间不一致
进入Jenkins→系统管理→脚本命令行,输入
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')