sonar環境的搭建


作者:維唯為為

簡單介紹

    Hudson 是一個可擴展的持續集成引擎(Continuous Integration Engine)。主要用於:持續、自動地構建/ 測試軟件項目. 監控一些定時執行的任務;

    Sonar 是一個開源的質量管理平台,專注於從項目到類方法的持續的分析和測量技術質量,它把代碼質量相關軟件集成到一起統一管理。

    簡單來說:

    hudson 是持續、自動地構建/ 測試軟件項目;sonar 則是持續,自動地統計並分析軟件項目的相關質量數據,例如單元測試的通過率,覆蓋率,代碼的復雜度,代碼的行數等等,用於評估和度量軟件項目質量。

   Sonar 是一個開源的代碼質量管理平台,專注於對從項目組合到類方法的持續分析和度量其技術質量,當然你也可以使用開源的插件來擴展Sonar,查看擴展可以訪問 open source plugins forge 

以下是sonar環境及相關技術的一個關聯圖:

 

 

工具說明:

jacoco : is an Open Source and robust code coverage tool , Sonar is delivered with Cobertura plugin but if you prefer JaCoCo you just have to install this plugin and go back to your favorite practice : the test driven development.

findbugs:

 

第一步.創建數據庫

    sornar默認就裝載了Apache Derby ( an Apache DB subproject ) ,所以如果使用 Derby 不需要安裝;它只是用於演示和測試,在實際應用中還是用外部強健的數據庫,更多詳細見  supported platforms 

    要使用外部數據庫,它要求明確建立 database schema permission ,當第一次啟動sonar 的時候,table index會自動創建,例如設置使用的外部數據庫為  MySql 數據庫,可以用以下腳本:

 

#

# Create Sonar database and user.

#

# Command: mysql -u root -p < create_database.sql

#

 

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

 

CREATE USER 'sonar' IDENTIFIED BY 'sonar';

GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';

FLUSH PRIVILEGES;

 

下載地址: extras/database/mysql

注:當創建數據庫時,Character Set 推薦使用utf-8 ,同時校驗規則 Collation 是對大小寫敏感。

 

第二步.下載安裝sonar

1.下載並解壓它的發行版本 the distribution.

2.如果你使用sonar默認內嵌的Derby數據庫,編輯 conf/sonar.properties文件配置對數據的訪問,這個模板適用於所有支持的數據庫,只需要注釋掉derby專用的前四行,同取消對要引用外部數據庫鏈接的注釋。

原文如下:

If you do not use the default embedded database, edit conf/sonar.properties to configure the database access. Templates are available for every supported database. Just uncomment them and comment the first four lines dedicated to derby.

  • sonar.jdbc.url : the URL of the database
  • sonar.jdbc.driver : the class of the driver
  • sonar.jdbc.user : the username (default value is 'sonar')
  • sonar.jdbc.password : the password (default value is 'sonar')

    Example for MySQL :

    #sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true

    #sonar.jdbc.driverClassName: org.apache.derby.jdbc.ClientDriver

    #sonar.jdbc.defaultTransactionIsolation: 1

    #sonar.jdbc.validationQuery: values(1)

    sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8

    sonar.jdbc.driverClassName: com.mysql.jdbc.Driver

    sonar.jdbc.validationQuery: select 1 

     

    第三步.啟動 sonar 應用

    啟動 sonar 應用,這里有幾種方式:

    Mode 1 - Start the standalone application

    編輯conf/sonar.properties文件,

    我這里設置的是:

    sonar.web.host : 192.168.5.28

    sonar.web.port: 9000

    sonar.web.context: /sonar

     

    執行以下腳本,啟動sonar服務;

     On Linux/Mac OS : bin/<YOUR OS>/sonar.sh start

     On MS Windows : bin/windows-x86-32/StartSonar.bat

     Read "Install on AIX, HPUX or Solaris" for other platforms

    You can now browse to http://localhost:9000.

    在瀏覽器中訪問,如圖:

     

    2

     

    Mode 2 - Deploy on JEE Server

    sonar應用也可以打包成war布署到JEE server上,支持 Tomcat 5.x, 6.x, 7.x and Jetty 6.x

    安裝步驟:

     1.Edit conf/sonar.properties as described in standalone mode. The file conf/wrapper.conf is never used when deploying to application server.

     2.Execute the script build-war.sh (or build-war.bat on MS Windows) from the directory war/

     3.Deploy war/sonar.war to the application server

     4.Browse to http://localhost/sonar and follow setup instructions

    注:sonar要求的最小堆內存大小是512Mb,所以在啟動tomcat之前,通過設置 CATALINA_OPTS,來增加tomcatmemory heap size。如,修改catalina.bat :

    set CATALINA_OPTS=-Xmx1024m -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -XX:MaxPermSize=256m

    set set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_24

    Set JAVA_OPTS=-Xms512m -Xmx256m

     

    Mode 3 - Run as a service on MS Windows

    Install/uninstall NT service (may have to run these batch files via "Run As Administrator"):

    bin/windows-x86-32/InstallNTService.bat

    bin/windows-x86-32/UninstallNTService.bat 

    Start/stop the service :

    bin/windows-x86-32/StartNTService.bat

    bin/windows-x86-32/StopNTService.bat 

       

    Mode 4 - Run as a service on Linux

    The following has been tested on Ubuntu 8.10.

    Create the file /etc/init.d/sonar with this content :

    #! /bin/sh

    /usr/bin/sonar $* 

    Register Sonar at boot time :

    sudo ln -s $SONAR_HOME/bin/linux-x86-32/sonar.sh /usr/bin/sonar

    sudo chmod 755 /etc/init.d/sonar

    sudo update-rc.d sonar defaults 

     

    Running Sonar behind Nginx

    我們假設你已經安裝了Nginx, sonar的虛擬主機(visual host)是使用 www.somecompany.com 並且sonar服務已啟動,並且對應的 http://sonahost:sonarport/可用.

    編輯Nginx配置文件. sonar的主機 http://www.somecompany.com/ 包含進來,如下:

    # the server directive is nginx's virtual host directive

    server {

      # port to listen on. Can also be set to an IP:PORT

      listen 80;

       

      # sets the domain[s] that this vhost server requests for

      server_name www.somecompany.com;

       

      location / {

        proxy_pass http://sonarhost:sonarport;

      }

    }

    Nginx configuration is going to vary based on your own application's requirements and the way you intend to expose Sonar to the outside world. If you need more details about Nginx, please see http://nginx.org.

     

    配置多個tomcat

  1. 下載壓縮版的 tomcat,
  2. 增加環境變量 CATALINA_HOME2 ,值為新的 tomcat 的地址;增加環境變量 CATALINA_BASE2 ,值為新的 tomcat 的地址。
  3. 修改新的 tomcat 中的 startup.bat ,把其中的 CATALINA_HOME 改為 CATALINA_HOME2
  4. 修改新的 tomcat 中的 catalina.bat ,把其中的 CATALINA_HOME 改為 CATALINA_HOME2 CATALINA_BASE 改為 CATALINA_BASE2
  5. 修改 conf/server.xml 文件 , 將已被占用的端口都修改掉。

 

注:<Connector port="8180" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8543"

             URIEncoding="UTF-8" />

 

Maven環境的安裝

參考:http://maven.apache.org/download.html

Windows 2000/XP

  1. 解壓apache-maven-3.0.4-bin.zip 到你指定的安裝目錄. 這里默認假設安裝到 C:\Program Files\Apache Software Foundation.
  2. 添加 M2_HOME = C:\Program Files\Apache Software Foundation\apache-maven-3.0.4. 不要有任何空格或引號: Maven2.0.9以下版本, M2_HOME 的路徑的值最后面不要有 '\' .
  3. 在同一個對話框中添加環境變量 M2 = %M2_HOME%\bin.
  4. 可選: 添加環境變量 MAVEN_OPTS = -Xms256m -Xmx512m. =
  5. 確保存在環境變量 JAVA_HOME = <YOU JDK INSTALL DIRECTORY>\Java\jdk1.5.0_02 以及  %JAVA_HOME%\bin 也被添加到了 Path 環境變量中.
  6. 打開命令行,運行 mvn --version 確認maven是否正確安裝.

    如下圖:

     

     

Unix-based Operating Systems (Linux, Solaris and Mac OS X)

  1. 解壓 apache-maven-3.0.4-bin.tar.gz 到你指定的安裝目錄,這里假設你安裝到 /usr/local/apache-maven.
  2. 在命令終端添加環境變量 M2_HOME ,例如 export M2_HOME=/usr/local/apache-maven/apache-maven-3.0.4.
  3. 添加環境變量 M2 ,例如 export M2=$M2_HOME/bin.
  4. 可選: 添加環境變量 MAVEN_OPTS用來指JVM的屬性, 例如 export MAVEN_OPTS="-Xms256m -Xmx512m".
  5. 添加M2環境變量 M2 到你的PATH環境變量中, 例如 export PATH=$M2:$PATH.
  6. 確保JAVA_HOME 正確的配置到了你的 JDK, 例如 export JAVA_HOME=/usr/java/jdk1.5.0_02,並且 $JAVA_HOME/bin 也添加到了你的環境變量 PATH .
  7. 在終端運 mvn --version 確認Maven是否安裝正確.

 

在maven中配置sonar

全局配置

使用maven的插件讓Sonar執行項目分析是最簡單、使用最廣泛的一種方式,To do so, you should edit settings.xml file, located into $MAVEN_HOME/conf or ~/.m2, and the database parameters to be used as well as the Sonar server URL

例如:

<settings>

<profiles>

<profile>

<id>sonar</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<!-- EXAMPLE FOR MYSQL -->

<sonar.jdbc.url>

jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8

</sonar.jdbc.url>

<sonar.jdbc.driverClassName>com.mysql.jdbc.Driver</sonar.jdbc.driverClassName>

<sonar.jdbc.username>sonar</sonar.jdbc.username>

<sonar.jdbc.password>sonar</sonar.jdbc.password>

 

<!-- optional URL to server. Default value is http://localhost:9000 -->

<sonar.host.url>

http://localhost:8180/sonar <!—此處填訪問sonar應用的url -->

</sonar.host.url>

</properties>

</profile>

</profiles>

</settings>

 

分析一個由Maven構建的項目

分析一個Maven project,首先要在包含了pom.xml  文件的項目目錄下,運行一個maven goal , maven goal的執行要在sonar分析之前執行,maven命令如下:

mvn clean install -Dtest=false-DfailIfNoTests=false

mvn sonar:sonar

或者直接用這個命令:

mvn clean install sonar:sonar -Dmaven.test.failure.ignore=true

 

 

如圖:

 

 

注:ayyc 是一個maven project , ayyc目錄下包含了pom.xml文件。

 

分析一個非maven構建的項目

其實,sonar可以分析任何一個Java項目,即使它不是由maven2構建的。當這個項目中配置了可用的xml文件(下面會它的內容格式)以及收集這個項目的信息的sonar應用服務也被被配置好了,那么就可以分析這個項目的代碼了(包括單元測試的代碼)。

    首先,安裝 Maven2 (just unzip, define the $MAVEN_HOME property and add $MAVEN_HOME/bin to $PATH)

    然后,在你的項目的根目錄下創建一個名為 pom.xml 的文件。pom.xml如下編輯:

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>[YOUR.ORGANIZATION]</groupId>

<artifactId>[YOUR.PROJECT]</artifactId>

<name>[YOUR PROJECT NAME]</name>

<version>[YOUR PROJECT VERSION]</version>

<build>

<sourceDirectory>[YOUR SOURCE DIRECTORY]</sourceDirectory>

<outputDirectory>[YOUR CLASSES/BIN DIRECTORY</outputDirectory>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<configuration>

<source>1.5</source>

<target>1.5</target>

<excludes>

<exclude>**/*.*</exclude>

</excludes>

</configuration>

</plugin>

</plugins>

</build>

<properties>

<sonar.dynamicAnalysis>false</sonar.dynamicAnalysis>

</properties>

</project>

 

這些參數代表的意義如下表:

  

Description 

Example  

[YOUR.ORGANIZATION]  

the id of your organization (no space)  

com.myorganization 

[YOUR.PROJECT] 

the id of your project (no space)  

my.project 

[YOUR PROJECT NAME] 

the name displayed into sonar (spaces allowed)  

My Project 

[YOUR PROJECT VERSION] 

the version. Set 1.0 if no specific version.  

1.0 

[YOUR SOURCE DIRECTORY] 

the relative path to the sources directory  

src/java  

[YOUR CLASSES/BIN DIRECTORY] 

the relative path to the compiled java classes directory  

bin  

 

執行maven plugin,使用如下命令:

mvn sonar:sonar

如下圖:

 

注:在findbugssonar light模式下

    sonar light模式下,findbugs會被激活,但是findbugs需要已被編譯好的class文件,才能去找不合符規范的類。在maven項目下,findbugs默認嘗試在target/classes目錄下找; 如果你是用Ant生成的類,那么你需要在pom.xml文件中的"<sourceDirectory> 結點下添加"<outputDirectory>[YOUR CLASSES/BIN DIRECTORY]</outputDirectory>",另外你在還要在"<dependencies>"結點下為findbugs定義aux classpath,配置如下:

<dependency>

    <groupId>deps</groupId>

    <artifactId>dep1</artifactId>

    <version>0.1</version>

    <scope>system</scope>

    <systemPath>${basedir}/web_app/WEB-INF/lib/struts.jar</systemPath>

</dependency>

如果你少添加了依賴的jar包,就會看到有如下提示信息:

The following classes needed foranalysis were missing:

 org.springframework.jdbc.object.StoredProcedure

 org.displaytag.decorator.TableDecorator

更多詳細內容請參見:http://docs.codehaus.org/display/SONAR/Analyse+with+Maven

 

hudson的安裝配置

安裝

第一步:把的hudson.war 包放到tomcat webapps下,然后啟動tomcat

第二步:在瀏覽器中輸入http://hudsonhost:8080/hudson 如果出現正常頁面表示Hudson 已經安裝成功。

第三步:配置hudson,如下圖:

 

系統消息:可以理解為登錄系統后的歡迎詞,你可以寫點隨意的東西,然后弄個 Logo 圖片什么的,它也支持 HTML 語言。

生成前等待時間:這個值是表示你可以讓你的構建有等待時間,以防止在提交代碼的過程中去開始構建。這里是全局的變量,也可以在每個項目里面去設定。

啟用安全:這里是 hudson 權限的相應設置,如果想對每個用戶進行相應的權限操作,選擇授權策略項下的"項目矩陣授權策略"這個選項就可以進行相應的設置了。

 

mavenjdk設置:就是取個名字,然后路徑中指定 maven2 的解壓路徑。在這里設置時,去掉自動安裝,直接指定 MAVEN_HOME(依個人設置)即可。

注:選中hudson專有數據庫,才能有用戶注冊的功能。

 

集成sonar

sonar搭建好后,進入sonar插件的安裝:

1進入Hudson的系統管理->的插件管理,進入"可用插件",選擇sonar( Hudson Sonar Plugin) 插件,在頁面右下角(最下面)點擊安裝,頁面提示成功,重啟hudson ,插件就生效了。如下圖:

 

2.配置sonar插件,在系統配置頁面找到Sonar,配置sonar的系統信息,如下圖:

 

 

3.新建一個hudson Job,配置構建選項,如下圖:

 

配置項目關聯到sonar,如下圖:

 

 

svn服務端的安裝配置

    windows下安裝,首先,下載svn服務端,直接安裝,完成后,配置svn的數據倉庫,如下:

  1. 創建SVN儲存庫(repository),可以選擇命令行方式或者通過TortoiseSVN插件進行GUI操作,命令行運行:svnadmin create E:\svn\repository
  2. repository創建完畢后會在目錄下生成若干個文件和文件夾,dav目錄是提供給Apachemod_dav_svn使用的目錄,讓它們存儲內部數據;db目錄就是所有版本控制的數據文件;hooks目錄放置hook腳本文件的目錄;locks用來放置Subversion文件庫鎖定數據的目錄,用來追蹤存取文件庫的客戶端;format文件是一個文本文件,里面只放了一個整數,表示當前文件庫配置的版本號。
  3. 打開 svnserve.conf, 找到:

    # [general]

    # anon-access = read

    # auth-access = write

    # password-db = passwd

    去之每行開頭的#password-db = passwd第二行是指定身份驗證的文件名,即passwd文件

  4. 同樣打開 passwd 文件,找到:

    # [users]

    # harry = harryssecret

    # sally = sallyssecret

    把這幾行的開頭#字符去掉,這是設置用戶,一行一個,存儲格式為"用戶名 = 密碼"

  5. 設置服務

    安裝服務

    sc create subversion_service binpath= "c:\subversion\bin\svnserve.exe --service -r c:\svn_test\repos" displayname= "Subversion Repository" depend= Tcpip

    刪除服務

    sc delete subversion_service

6.svn目錄設置

trunk——主干:這里存放的是最新穩寫的源碼,權限為項目組長可寫,其它任何人有可讀的權限。

branches——開發分支:這里存放的是各開發中的版本,權限為任何開發人員可寫,其它任何人不可讀。

tags——快照發布版本:這里存放的是臨時發布的版本,權限為任何開發人員可寫,其它任何人不可讀。

developer-resources——開發資源:這里存放的是開發者所需的開發資源,如:各類公用類庫、.jar等。

 

在eclipse安裝各種插件

將要安裝的插件包中的featuresplugins,解壓到<YOUR INSTALL PATH> \Genuitec\MyEclipse 8.5\dorpins\plugin_name目錄下,並在此目錄下建立一個plugin_name.link,文件內容是:

path=<YOUR INSTALL PATH> \Genuitec\MyEclipse 8.5\dorpins\plugin_name

例如安裝svn插件,即可在此目錄下建立一個svn的文件夾,將插件包中的featuresplugins,拷到此目錄下,並在此目錄,新建一個svn.link的文件,文件內容是:

path=<YOUR INSTALL PATH> \Genuitec\MyEclipse 8.5\dorpins\svn.link

下載地址:\\192.168.1.201\wap\技術資源共享\sonar\eclipse-plugins,包括:

subclispeeclipseplugin-checkstylesonar eclipsepmdm2eclipse

 

eclipse中的各項配置

 

sonar的配置

指定sonar server

當安裝好了sonar-eclipse插件后,可以在 Eclipse 全局 Preferences 窗口中看到,編輯后,如下圖:

 

 

連一個projectssonar server

1. Package explore 對要連接到sonar server的項目右擊,選擇"Configure -> Associate with Sonar..." :

 

 

注:Q: when i go to eclipse configure>associate with sonar says that my groupId is empty

    A: There few things to check:

  1. Check the groupId is actually there in your pom.xml.
  2. Check that the artifactId and the eclipse project name are the same.
  3. Check that you typed groupId and artifactId in the associate with sonar dialog window. Then click find on server.
  4. Also make sure that the sonar plugin is set up on your eclipse (by going to Windows->Preferences->Sonar).

 

關聯好后,在項目上點擊右鍵,選擇,如下圖:

 

sonar分析此項目的情況,如下圖:

Dashboard標簽下,可以看到ttpod-ayyc的代碼的行數、類的個數、注釋所占百分比等信息。

 

 

sonar應用的使用及對項目的分析詳解

更加詳細可查看:http://docs.codehaus.org/display/SONAR/Documentation

 

sonar server的整體介紹

sonar workspace

The Sonar web site is divided into 3 main areas:

  • "Home" area
  • Project area
  • Configuration area

 

頂部工具條,如下圖:

 

左側菜單,當當前的操作針對所有project時,如下圖:

 

當當前操作一個 project Area,如下圖:

 

 

sonar應用中項目

包括的分析視圖有:

The Dashboard,The Rules Compliance Index (RCI),Design & Architecture,The project Treemap,The Events,Measures Drilldown,Violations Drilldown,Coverage Clouds,Hotspots,Components,Design / DSM,Managing libraries

詳細內容可參考:http://docs.codehaus.org/display/SONAR/Browsing+a+Project

 

資源查看器

在這個視圖中包括:

coverage:覆蓋率,是通過標注額外的提示信息和不同顏色顯示覆蓋情況,比如,代碼對應的單元測試的條件的覆蓋率。

Violations:違規的,同樣也是通過標注額外的提示信息和不同顏色顯示違規信息

Duplications:重復的,顯示了具體重復的代碼

Dependencies:依賴關系,例舉出了被選中的文件的內向與外向的依賴關系

LCOM4:緊密關系,

source:項目源代碼

Test:單元測試的代碼

 

 

sonar的Advanced parameters

    這些參數可以在多個地方設置,比如可以在以下地方設置:

  • Global parameters, defined in the UI, will apply to all projects
  • Project parameters, defined in the UI, will override global parameters
  • Project parameters, defined in configuration file, will override the ones defined in the UI
  • Command line parameters, defined at analysis time, will override any parameters

下表列出了sonar的配置參數:具體參看此鏈接 sonar的高級參數

 

sonar的第一部份內容,就介紹到此。


免責聲明!

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



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