SonarQube LTS 7.9版之后,放弃了对于MySQL数据库的支持,同时Java的版本已经升至Java 11. 由于此两项依赖均为强制性依赖,所以从老版本上升上来的SonarQube至少需要完成Java版本的升级和数据库的移植才能实现SonarQube的版本升级。这篇文章以容器化的SonarQube服务升级为例,介绍如何实现从SonarQube LTS 6.7.1版本 + MySQL 5.7.16版本 升至SonarQube 7.9.1版本 + PostgreSQL 12.1版本。
事前准备
准备LTS 6.7.1版本 + MySQL 5.7.16的环境,详细可参看:
- https://liumiaocn.blog.csdn.net/article/details/102691455
准备一些基础数据,用于验证数据库移植前后的效果,此处使用Angular项目的扫描作为示例,详细可参看:
- https://liumiaocn.blog.csdn.net/article/details/102670480
事前准备的数据详细如下图所示,可以看到有三个扫描的项目,而且SonarQube的版本是6.7.1:
步骤1: 基于Postgres的SonarQube环境搭建
搭建一个同版本的6.7.1的SonarQube环境,此环境中需要使用Postgresql作为数据库存储SonarQube的信息。如果直接启动一个Postgresql的数据库,然后使用SonarQube官方提供的数据移植工具的化,会提示如下错误信息
Could not determine SonarQube version of the target database. Could not select version from schema_migrations. ERROR: relation "schema_migrations" does not exist
其实此工具应该是建立在对应的数据库结构创建完成的基础上,所以才会要求相同版本。因为本文使用容器化的方式,所以只需要修改docker-compose.yml文件做如下设定即可
liumiaocn:sonar liumiao$ cat docker-compose.6.7.migration.yml
version: '2'
services:
# database service: mysql
mysql:
image: liumiaocn/mysql:5.7.16
ports:
- "3306:3306"
volumes:
- ./mysql/data/:/var/lib/mysql
- ./mysql/conf.d/:/etc/mysql/conf.d
environment:
- MYSQL_ROOT_PASSWORD=hello123
- MYSQL_DATABASE=sonarqube
restart: "no"
# Security service: sonarqube
sonarqube:
image: liumiaocn/sonarqube:6.7.1
ports:
- "9000:9000"
volumes:
- ./sonar/data/:/opt/sonarqube/data
- ./sonar/log/:/opt/sonarqube/log
- ./sonar/extensions/:/opt/sonarqube/extensions
- ./sonar/conf/:/opt/sonarqube/conf
environment:
- SONARQUBE_JDBC_USERNAME=root
- SONARQUBE_JDBC_PASSWORD=hello123
- SONARQUBE_JDBC_URL=jdbc:mysql://mysql:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
links:
- mysql:mysql
depends_on:
- mysql
restart: "no"
# database service: postgres
postgres:
image: postgres:12-alpine
volumes:
- ./postgres/postgresql/:/var/lib/postgresql
- ./postgres/data/:/var/lib/postgresql/data
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
restart: "no"
# Security service: sonarqube for postgresql
sonarpostgres:
image: liumiaocn/sonarqube:6.7.1
ports:
- "9001:9000"
volumes:
- ./sonarpostgres/data/:/opt/sonarqube/data
- ./sonarpostgres/log/:/opt/sonarqube/log
- ./sonarpostgres/extensions/:/opt/sonarqube/extensions
- ./sonarpostgres/conf/:/opt/sonarqube/conf
environment:
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- SONARQUBE_JDBC_URL=jdbc:postgresql://postgres:5432/sonar
restart: "no"
liumiaocn:sonar liumiao$
这样就启动了一个在9001端口的SonarQube,此SonarQube的数据库使用的是Postgres。启动后的服务信息如下所示
liumiaocn:sonar liumiao$ docker-compose -f docker-compose.6.7.migration.yml ps
Name Command State Ports
---------------------------