Sonar升級遇到的那些事兒


目錄
    背景
    如何升級
    如何回滾
    問題解決
    參考

 

背景

目前我們用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM