目录
背景
如何升级
如何回滚
问题解决
参考

背景

目前我们用SonarQube版本是4.0,这次准备升级到最新版本5.1, 以便支持以后的JavaScript的项目。

如何升级

我们可以直接跨越版本升级,而不需要逐个版本去升级。

1. 升级之前需要备份一下数据库, 我的是mysql, 用mysqldump这个命令即可。

mysqldump -u Username -p DBScheme > Snoar_backup.sql

2. 停掉SonarQube server

bin/<SYSTEM>/sonar stop

到安装目录bin下面执行stop 命令, 我的是进入/sonar/sonarqube-4.0/bin/linux-x86-64目录下 运行./sonar.sh stop

或者直接执行/sonar/sonarqube-4.0/bin/linux-x86-64/sonar.sh stop

3. 下载最新的SonarQube包并且解压unzip到某一个新目录下, 下载地址:http://www.sonarqube.org/downloads/

4. 参考旧SonarQube的配置更新如下两个配置文件

/sonar/sonarqube-4.0/conf/sonar.properties
/sonar/sonarqube-4.0/conf/wrapper.conf

注意:不要拿旧文件直接覆盖这两个文件。(来自官网)

5. 拷贝下面目录里的插件到新的SonarQube相应目录下

/sonar/sonarqube-4.0/extensions/plugins

注意:关于插件的兼容性问题,请参考Compatibility Matrix

有些插件会导致你无法启动新的SonarQube server, 比如我遇到的sonar-jacoco-plugin, Deprecated since Java Plugin version 2.4 embedding directly the support of JaCoCo.

java plugin 2.4 之后集成了JaCoCo

6. 如果用的定制化的JDBC Driver, 同样要拷贝到新SonarQube相应目录下

/sonar/sonarqube-4.0/extensions/jdbc-driver

7. 启动新SonarQube的server

/sonar/sonarqube-5.1/bin/linux-x86-64/sonar.sh start

8. 登陆Web端 http://localhost:9000/setup 配置,然后就可以进入新版本SonarQube了http://localhost:9000

如何回滚

如果发现更新失败或者有问题,按如下方式回滚

1. 回滚数据库

mysql -hHost -uUsername -pPassword sonar < /home/wadexu/Snoar_backup.sql

2. 确保旧的SonarQube配置文件指向这个数据库

3. 启动旧的SonarQube server

/sonar/sonarqube-4.0/bin/linux-x86-64/sonar.sh start

问题解决

1. 插件问题,能更新的都下载最新的放到此目录下

/sonar/sonarqube-5.1/extensions/plugins

我的插件列表如下

-rwxr-xr-x 1 root root 2634077 May 22 02:43 sonar-java-plugin-3.3.jar
-rwxr-xr-x 1 root root 1349308 May 22 02:43 sonar-javascript-plugin-2.5.jar

新的Java plugin 取代了以前这些插件

 sonar-checkstyle-plugin.jar
sonar-findbugs-plugin.jar
sonar-pmd-plugin.jar

2. 升级之后登陆http://localhost:9000 会自动跳转到http://localhost:9000/maintenance 并提示Sonar is under maintenance. Please check back later.

--需要手动登陆http://localhost:9000/setup 做一些设置

3. 老的项目运行新SoanrQube之后,不显示单元测试结果,覆盖率之类的了。

原因是新的java plugin集成了JaCoCo, 但是需要做一些配置才可以生效。

我的是Maven项目, 配置pom.xml如下

    <dependency>
<groupId>org.codehaus.sonar-plugins.java</groupId>
<artifactId>sonar-jacoco-listeners</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
    <build>
<finalName>test</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>false</skipTests>
<properties>
<property>
<name>listener</name>
<value>org.sonar.java.jacoco.JUnitListener</value>
</property>
</properties>
</configuration>
</plugin>
</plugins>
</build>

运行

mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install sonar:sonar -Dsonar.jdbc.url=jdbc:mysql://10.46.10.20:3306/sonar -Dsonar.jdbc.username=sonar -Dsonar.jdbc.password=sonar -Dsonar.host.url=http://10.46.10.20:9000

SonarQube结果:

4. 插件安装,只需要把下载的jar 放到/sonarqube-5.1/extensions/plugins 目录下,重启SonarQube server即可。

5. 由于我安装了JavaScript plugin, 对于Web项目,默认quailty 都会扫所有的.java, .js代码

如果想要排除webapp下的代码,设置如下Settings->General Setting->Exclusions->Files, Source File Exclusions=src/main/webapp/**

可以针对某个项目设置 也可以Global设置

6. Code Coverage 也可以排除,一种方式在Sonar里设置Settings->General Setting->Exclusions->Code Coverage

例如Coverage Exclusions = com/demo/test/entity/*.java

另一种方式是在Maven项目里配置pom.xml文件,如下

 <properties>
<java-version>1.7</java-version>
<org.springframework-version>4.1.5.RELEASE</org.springframework-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<sonar.exclusions>
com/demo/test/constant/*,com/demo/test/entity/*
</sonar.exclusions>
</properties>

7. 如果你想Sonar集成JavaScript写的项目,可以用这个插件grunt-sonar-runner

module.exports = function (grunt) {

  // configuration
grunt.initConfig({ sonarRunner: {
analysis: {
options: {
debug: true,
separator: '\n',
sonar: {
host: {
url: 'http://10.46.10.101:9000'
},
jdbc: {
url: 'jdbc:mysql://10.46.10.101:3306/sonar',
username: 'sonar',
password: 'sonar'
}, projectKey: 'sonar:grunt-sonar-runner:0.1.0',
projectName: 'Grunt Sonar Runner',
projectVersion: '0.10',
sources: ['app'].join(','),
language: 'js',
sourceEncoding: 'UTF-8'
}
}
}
} }); // plugins
grunt.loadNpmTasks('grunt-sonar-runner'); // tasks
grunt.registerTask('coverage', ['sonarRunner:analysis']);
};

参考

SonarQube官方升级站点: http://docs.sonarqube.org/display/SONAR/Upgrading

SonarQube Release 5.1 Upgrade Notes: http://docs.sonarqube.org/display/SONAR/Release+5.1+Upgrade+Notes

Sonar升级遇到的那些事儿的更多相关文章

  1. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  2. 在一个老外微信PM的眼中,中国移动App UI那些事儿

    本文编译自Dan Grover的博客,他现在是腾讯微信的产品经理.以下是他从旧金山搬到广州后的近半年时间里,在试用过微信微博等中国主流移动App后,总结出的中美App在设计理念上的差异,并对中国移动A ...

  3. [Maven]Maven 那点事儿

    0. 前言 Jason Van Zyl,在 Java 十大风云人物排行榜上或许会看到他. 这兄弟是干嘛的? 他就是 Maven 的创始人,人们都尊称他为"Maven 他爸". 毋庸 ...

  4. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  5. Jenkins+Maven+Sonar系统持续集成环境部署以及配置

    一.Jenkins介绍以及安装 什么是持续集成?   随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Ag ...

  6. Linux系统中“动态库”和“静态库”那点事儿【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...

  7. JLINK固件丢失或升级固件后提示Clone的解决办法

    J-LINK V8固件烧录指导 J-LINK 是使用过程中,如果内部固件意外损坏或丢失,请参考下面操作步骤说明,重新烧录JLINK固件. 安装固件烧录软件 请ATMEL官方网址下载AT91-ISP下载 ...

  8. 关于JLINK固件丢失或升级固件后提示Clone的解决办法

    本人用的JLINK仿真器(某宝上买的),在使用新版KEIL时,提示要升级固件,升级后就出现JLINK is Clone的提示.在网上找了许多关于修复的资料,都觉得不是很好.经过本人反复试验,总算找到比 ...

  9. DBA避坑宝典:Oracle运维中的那些事儿

    对于Oracle运维中的那些事儿,我的最终目的:不是比谁更惨,而是能够从中吸取经验和教训. 从我的理解来看,我会从下面的几个方面来进行说明DBA运维中的一些事儿. 每个部分都是非常关键的,缺一不可,而 ...

随机推荐

  1. pwnable.kr-bof

    .Nana told me that buffer overflow is one of the most common software vulnerability. Is that true? D ...

  2. 如何提高Service的优先级避免被杀死或者杀死后如何再次重启Service?

    2014-01-21 16:45:02 我们知道,当进程长期不活动时,如果系统资源吃紧,会杀死一些Service,或不可见的Activity等所在的进程. 如何避免Service被系统杀死,随便在网上 ...

  3. String与InputStream相互转换

    1.String to InputStream String str = "String与InputStream相互转换"; InputStream   in_nocode   = ...

  4. enmo_day_05

    大文件表空间 小文件表空间 临时表空间 :不需自己删除,session断了之后自动删除 永久表空间 : 本地管理表空间 :使用位图表示表空间,0表示没有数据,1表示有数据, 数据字典管理表空间 eg ...

  5. c# windows编程控件学习-2

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 2016 - 1 - 24 CSS初步

    1.The difference between CSS and HTML HTML document is that it specities the content of the page. An ...

  7. OpenSSL - 利用OpenSSL自签证书和CA颁发证书

    秘钥操作 这个命令会生成一个1024/2048位的密钥,包含私钥和公钥. openssl genrsa -out private.key 1024/2038                     ( ...

  8. cocos2d/x 自带字体(label)

    CCLabelTTF* label1 = CCLabelTTF::labelWithString("1掼蛋as", "AppleGothic", 15); la ...

  9. 【转】Lua coroutine 不一样的多线程编程思路

    Lua coroutine 不一样的多线程编程思路 Sunday, Apr 26th, 2009 by Tim | Tags: coroutine, Lua 上周末开始看<Lua程序设计> ...

  10. url中的百分号转译

    有一次发现自己输入的url中含有中文的时候,他会转化为%XXXX的格式. 于是想怎么把他给转换回去,于是使用了urllib库 #-*-coding:utf8 -*- import urllib url ...