• SonarQube v7.9 起,不再支持 JDK11 以下版本
  • SonarQube v7.8 起,不再支持 MySQL


SonarQube 整个架构包含 4 个组件:

  • SonarQube 服务端:包含 Web 服务界面、elasticsearch 搜索引擎、计算引擎三个主要部分
  • SonarQube 数据库:默认内嵌数据库,并支持 Oracle、PostgreSQL 和 Microsoft SQLServer 数据库
  • SonarQube 插件:包括语言、SCM、集成、身份验证和治理插件等
  • SonarScanner 客户端:开发人员或持续集成服务器通过 SonarScanner 进行项目代码分析

https://docs.sonarqube.org/8.9/

解压安装

1
2
3
4
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.9.9.56886.zip
unzip sonarqube-8.9.9.56886.zip
mv sonarqube-8.9.9.56886 /app/service/sonarqube
mkdir -pv /app/{data,logs,tmp}/sonarqube

配置文件

grep -Ev “^$|#” /app/service/sonarqube/conf/sonar.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vi /app/service/sonarqube/conf/sonar.properties

#默认使用内置数据库,但是无法安装扩展和升级
sonar.jdbc.username=sonarqube
sonar.jdbc.password=password
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=pubilc
#sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError
sonar.web.host=0.0.0.0
sonar.web.context=/sonarqube
sonar.web.port=9000
sonar.path.data=/app/data/sonarqube
sonar.path.logs=/app/logs/sonarqube
sonar.path.temp=/app/temp/sonarqube
#其他默认或者按需

多个 JDK 版本需要修改配置
1
2
vi /app/service/sonarqube/conf/wrapper.conf
wrapper.java.command=/app/service/jdk11/bin/java

修改内置 ES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
vi /app/service/sonarqube/elasticsearch/config/elasticsearch.yml
cluster.name: sonar-es
node.name: es-01
#path.data: /app/data/elasticsearch
#path.logs: /app/logs/elasticsearch
##锁定物理内存地址,避免 es 使用 swap 使 IOPS 变高
#bootstrap.memory_lock: true
#bootstrap.memory_lock: false
#上述为 false 需要追加配置
#bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
xpack.security.enabled: false
#单点部署
discovery.type: single-node
#集群部署
#node.master: true
#node.data: true
#discovery.zen.minimum_master_nodes: 1
#discovery.zen.ping_timeout: 3s
#discovery.zen.ping.unicast.hosts: ["ip1:9300","ip2:9300","ip3:9300"]
#初始时 Master 节点选取
#cluster.initial_master_nodes: ["elk-01"]
#开启跨域请求
http.cors.enabled: true
http.cors.allow-origin: "*"

ES 使用 JDK11
1
2
3
4
5
6
7
8
9
vi /app/service/sonarqube/elasticsearch/bin/elasticsearch

export JAVA_HOME=/app/service/jdk11
export PATH=$JAVA_HOME/bin:$PATH
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="/app/service/jdk11/bin/java"
else
JAVA=`which java`
fi

服务启停

1
2
3
4
5
6
7
8
9
10
#前台运行,关闭命令直接退出
/app/service/sonarqube/bin/linux-x86-64/sonar.sh console
#后台运行
/app/service/sonarqube/bin/linux-x86-64/sonar.sh start
#关闭服务
/app/service/sonarqube/bin/linux-x86-64/sonar.sh stop
#重启服务
/app/service/sonarqube/bin/linux-x86-64/sonar.sh restart

ln -s /app/service/sonarqube/bin/linux-x86-64/sonar.sh /usr/bin/sonar

Docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
docker volume create --name sonarqube_data
docker volume create --name sonarqube_logs
docker volume create --name sonarqube_extensions
#内嵌数据库
docker run --rm \
-p 9000:9000 \
-v sonarqube_extensions:/opt/sonarqube/extensions \
<image_name>
#搭建数据库
docker run -d --name sonarqube \
-p 9000:9000 \
-e SONAR_JDBC_URL=... \
-e SONAR_JDBC_USERNAME=... \
-e SONAR_JDBC_PASSWORD=... \
-v sonarqube_data:/opt/sonarqube/data \
-v sonarqube_extensions:/opt/sonarqube/extensions \
-v sonarqube_logs:/opt/sonarqube/logs \
<image_name>

相关配置

启动以后浏览器访问 http://192.168.254.100:9000,默认用户名密码为:admin、admin,手首次登录需要修改

界面汉化

登录后, 打开 Administration → Marketplace,搜索 chinese pack,点击 install;
离线安装需要先去下载汉化文件并放到软件根目录下 extensions/plugins/ 文件夹里