整體思路
- 准備測試數據(實際環境可跳過此步驟)
- 數據庫遷移(從版本7.9開始,SonarQube將不再支持MySQL,Mysql-->PG)
- Sonar版本升級(6.7.7 -> 7.9.1)
准備測試數據
創建用戶數據
創建項目數據
安裝sonar-scanner(mac)
tar zxf sonar-scanner-4.0.0.1744-macosx.tar.gz -C /usr/local/
export SONAR_HOME=/usr/local/sonar-scanner-4.0.0.1744-macosx
export PATH=$PATH:$M2_HOME/bin:$SONAR_HOME/bin
獲取maven項目
git clone https://github.com/zeyangli/simple-java-maven-app.git
mvn clean package
ls -l target/ | awk '{print $NF}'
classes
maven-archiver
maven-status
my-app-1.1-SNAPSHOT.jar
surefire-reports
test-classes
掃描項目
寫個for循環,循環執行。 執行兩次該腳本(因第一次分析的時候沒有缺陷會不顯示數據)
#!/bin/bash projectName="demo-service" scanTime=`date +%Y%m%d%H%M%S` for((i=1;i<=10;i++)) do sonar-scanner -Dsonar.host.url=http://xxxxxx:9000 \ -Dsonar.projectKey=${projectName}${i} \ -Dsonar.projectName=${projectName}${i} \ -Dsonar.projectVersion=${scanTime} \ -Dsonar.login=admin \ -Dsonar.password=admin \ -Dsonar.ws.timeout=30 \ -Dsonar.projectDescription="my first project!" \ -Dsonar.links.homepage=http://www.baidu.com \ -Dsonar.sources=src \ -Dsonar.sourceEncoding=UTF-8 \ -Dsonar.java.binaries=target/classes \ -Dsonar.java.test.binaries=target/test-classes \ -Dsonar.java.surefire.report=target/surefire-reports echo "${projectName} scan success!" done
效果
准備遷移數據庫
- 請注意我們要做的是數據庫遷移,是將MySQL遷移到PG數據庫。
- 我們需要啟動一個跟當前同版本的sonar來完成遷移。
- 若啟動不同版本的sonar會報錯,詳見FAQ2。
備份MySQL
[root@devops ~]# mysqldump -h 127.0.0.1 -uroot -p sonar >sonar-190803.sql
Enter password:
[root@devops ~]# du -sh sonar-190803.sql
4.6M sonar-190803.sql
配置PG
#安裝
yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum install postgresql96-server postgresql96-contrib
/usr/pgsql-9.6/bin/postgresql96-setup initdb
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
#創建Sonar數據庫
su - postgres
psql
create user sonarqube with password 'sonarqube';
create database sonarqube owner sonarqube;
grant all on database sonarqube to sonarqube;
\q
#遠程訪問設置
vi /var/lib/pgsql/9.6/data/postgresql.conf
#listen_addresses = '*'
vi /var/lib/pgsql/9.6/data/pg_hba.conf
# IPv4 local connections:
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident
host all all 0.0.0.0/0 ident
啟動新Sonar
#安裝同版本Sonarqube mkdir pg unzip sonarqube-6.7.7.zip -d pg/ cp sonarqube-6.7.7/conf/sonar.properties pg/sonarqube-6.7.7/conf/sonar.properties #跟源sonar配置相同,唯一不同的是數據庫配置。要改成postgreSQL。 sonar.jdbc.username=xxxx sonar.jdbc.password=xxxx sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonarqube #一定要啟動,否則會報錯。提示找到目標數據庫中的版本信息。詳見FAQ1 ./sonar.sh start
MySQL Migrator工具
#解壓
wget https://binaries.sonarsource.com/Distribution/mysql-migrator/mysql-migrator-1.1.0.119.zip
unzip mysql-migrator-1.1.0.119.zip && cd bin
#source.properties
sonar.jdbc.username=xxxx
sonar.jdbc.password=xxxx
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#target.properties
sonar.jdbc.username=xxxx
sonar.jdbc.password=xxxx
sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonarqube
# 運行遷移工具
./mysql-migrator -source source.properties -target target.properties
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table organizations ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table organization_members ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table groups_users ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table rules_parameters ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table rules_profiles ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table org_qprofiles ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table default_qprofiles ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table project_qprofiles ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table qprofile_edit_users ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table qprofile_edit_groups ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table groups ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table snapshots ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table group_roles ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table rule_repositories ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table rules ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table rules_metadata ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table events ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table quality_gates ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table quality_gate_conditions ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table properties ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table project_links ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table duplications_index ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table project_measures ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table internal_properties ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table projects ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table manual_measures ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table active_rules ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table notifications ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table user_roles ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table active_rule_parameters ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table users ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table metrics ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table loaded_templates ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table issues ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table issue_changes ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table permission_templates ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table perm_tpl_characteristics ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table perm_templates_users ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table perm_templates_groups ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table qprofile_changes ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table file_sources ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table ce_queue ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table ce_activity ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table ce_task_characteristics ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table ce_task_input ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table ce_scanner_context ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table user_tokens ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table webhook_deliveries ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table es_queue ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table plugins ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table project_branches ...
[main] INFO org.sonarsource.sqdbmigrator.migrator.ContentCopier - copying table analysis_properties ...
Tables Records Seconds
------------------------ ------- -------
organizations 1 0.1
organization_members 4 0.0
groups_users 5 0.0
rules_parameters 686 0.1
rules_profiles 18 0.0
org_qprofiles 18 0.0
default_qprofiles 9 0.1
project_qprofiles 0 0.0
qprofile_edit_users 0 0.0
qprofile_edit_groups 0 0.0
groups 2 0.0
snapshots 22 0.0
group_roles 28 0.0
rule_repositories 25 0.0
rules 2888 0.3
rules_metadata 0 0.0
events 21 0.0
quality_gates 1 0.0
quality_gate_conditions 5 0.0
properties 4 0.0
project_links 11 0.0
duplications_index 0 0.0
project_measures 3839 0.3
internal_properties 3 0.0
projects 55 0.1
manual_measures 0 0.0
active_rules 2957 0.1
notifications 0 0.0
user_roles 0 0.0
active_rule_parameters 167 0.0
users 4 0.0
metrics 145 0.0
loaded_templates 2 0.0
issues 473 0.1
issue_changes 0 0.0
permission_templates 1 0.0
perm_tpl_characteristics 0 0.0
perm_templates_users 0 0.0
perm_templates_groups 4 0.0
qprofile_changes 6543 0.3
file_sources 22 0.0
ce_queue 0 0.0
ce_activity 22 0.0
ce_task_characteristics 0 0.0
ce_task_input 0 0.0
ce_scanner_context 22 0.0
user_tokens 0 0.0
webhook_deliveries 0 0.0
es_queue 0 0.0
plugins 14 0.0
project_branches 11 0.0
analysis_properties 0 0.0
Migration successful in 2.7 seconds
#檢查pg中的數據
\c sonarqube
\dt
select * from projects;
重啟服務
#清除es索引
rm -fr data/es5
#重啟服務
./sonar.sh restart
驗證數據
項目信息
用戶信息
總結
- 到此數據遷移完成,開始准備后面的工作。將sonarqube版本升級到7.9.1 LTS
升級7.9.1
安裝JDK11
#因為現在在通過jdk8運行sonar6.7.7,所以暫時可以不配置全局變量,升級完成后將jdk11配置成全局即可。 tar zxf jdk-11_linux-x64_bin.tar.gz -C /usr/local/
配置SonarQube7.9.1
https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip
unzip sonarqube-7.9.1.zip
cp pg/sonarqube-6.7.7/conf/sonar.properties sonarqube-7.9.1/conf/sonar.properties
# sonarqube 7.9.1 必須使用jdk11
vim ../../conf/wrapper.conf
wrapper.java.command=/usr/local/jdk-11/bin/java
切換服務
#停止舊版本
cd pg/sonarqube-6.7.7/bin/linux-x86-64/
./sonar.sh stop
#啟動新版本
cd sonarqube-7.9.1/bin/linux-x86-64/
./sonar.sh start
啟動后會看到如下錯誤,需要初始化服務。
初始化服務 http://xxxxxxx:9000/setup
哈哈哈哈哈 升級完成了,數據未丟失
總結
- 升級完成,剩下的就需要安裝相關的插件了。
FAQ
1.Could not determine SonarQube version of the target database. Could not select version from schema_migrations. ERROR: relation "schema_migrations" does not exist
新創建的空的PG是不能進行遷移的,需要同版本的soanr使用后才會找到和這個表!
2.Versions in source and target database don't match: 1838 != 2804
此問題一定要注意在做數據庫遷移的時候,先運行一個同版本的新sonar進行遷移哦!
3.遷移完成沒有數據怎么辦? 是不是我操作錯誤了?
需要先刪除es索引再啟動sonarqube,詳見切換服務部分。
4.出現SonarQube is under maintenance
升級后需要初始化詳見切換服務部分。