Devops學習實踐(七)Jenkins 集成 Sonar

Jenkins 集成sonar 可以提供一個dashboard給項目成員和管理者,提供一個一目瞭然的項目分析情況,Sonar在代碼分析是非常有用的工具。下面就具體說說如何進行集成。

一、實踐目標

     1、安裝和配置sonar

             2、與Jenkins 集成

             3、通過某個具體工程項目來呈現sonar分析結果

       二、環境準備

     1、Jenkins 環境:  部署在192.168.136.144  centos6.5  

             2、mysql: 5.6.33: 部署在 192.168.136.144

            3、 sonargube 和 sonar scanner  部署在192.168.136.144

            4、 jdk:  1.8 (因爲高版本的jenkins和sonar 都要求1.8)

      三、安裝sonar

       1、下載sonar

       通過sonar的下載鏈接,我們可以下載最新的sonar 6.5版本,下載url爲:https://www.sonarqube.org/downloads/

       下載的版本爲:sonarqube-6.5.zip,並把它部署到192.168.136.144 的  /opt 目錄下。

       2、mysql中創建數據庫

       在mysql中創建sonar的數據庫:

       MySQL> CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar123';
       MySQL> CREATE DATABASE sonar CHARACTER SET UTF8;
       MySQL> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%';

       上面主要做的事情就是:爲sonar 創建一個數據庫和使用這個數據庫的用戶,並進行授權

       

       3、修改sonar 的相關配置

        首先修改:/opt/sonarqube-6.5/conf/sonar.properties 中的java啓動參數和數據庫連接信息

       

sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar123
sonar.jdbc.url=jdbc:mysql://192.168.136.144:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.context=/sonar
sonar.web.host=0.0.0.0
sonar.web.port=9000
      

       4、啓動和停止命令

        由於sonar部署包裏面爲了各種系統準備了啓動腳本,所以我們可以根據系統情況,做一個軟鏈接到sonar的根目錄:

        通過  ln -s  bin/linux-x86-64/sonar.sh  sonar.sh 建立一個軟鏈接

[root@cwqsolo sonarqube-6.5]# ln  -s   bin/linux-x86-64/sonar.sh  sonar.sh
[root@cwqsolo sonarqube-6.5]# ls  -ltr
total 40
-rw-r--r--  1 root root 7651 Jul 31 21:00 COPYING
drwxr-xr-x  8 root root 4096 Oct  4 06:44 bin
drwxr-xr-x  2 root root 4096 Oct  4 06:44 data
drwxr-xr-x  4 root root 4096 Oct  4 06:44 extensions
drwxr-xr-x 10 root root 4096 Oct  4 06:44 lib
drwxr-xr-x  2 root root 4096 Oct  4 06:44 logs
drwxr-xr-x  2 root root 4096 Oct  4 06:44 temp
drwxr-xr-x  9 root root 4096 Oct  4 06:44 web
drwxr-xr-x  2 root root 4096 Oct  4 06:56 conf
lrwxrwxrwx  1 root root   25 Oct  4 07:00 sonar.sh -> bin/linux-x86-64/sonar.sh
[root@cwqsolo sonarqube-6.5]# 
        通過上述部署, 在sonar部署目錄下,啓動和停止簡化爲:      

sonar.sh stop
sonar.sh start 
sonar.sh restart
#控制檯啓動
sonar.sh console
## 查看日誌
tail -f ./logs/sonar.log
     sonar 6需要java 1.8 版本的支持,否則會報告如下錯誤


         在部署了java 1.8 之後,日誌打印正常。說明如果環境中有多個java版本,並且缺省java 不是 jdk 1.8 怎麼辦呢? 可以通過修改  conf/wrapper.conf 中的屬性

    wrapper.conf:wrapper.java.command=java 

    通過修改“java”來設置1.8版本的jdk,如通過下面方式:

   wrapper.conf:wrapper.java.command=/usr/java/jdk1.8.0_112/jre/bin/java


        5、啓動sonar

         通過命令(  ./sonar.sh  start),就可以用url:   http://192.168.136.144:9000/sonar/ 來訪問sonargube服務了。 缺省賬號密碼 admin / admin


下面首先把sonar 中文漢化一下,從  https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases  上,下載 sonar-l10n-zh-plugin-1.17.jar,將這個插件,部署到/opt/sonarqube-6.5/extensions/plugins。 在sonar部署目錄裏面, 通過   ./sonar.sh  restart 重啓後,就可以看到中文界面了。

        也可以通過administration-》system-》update 找到中文包,進行安裝:        

           中文安裝好後,重新打開sonar的界面,是這樣的,清楚多了:



       6 安裝 sonar-scanner

       安裝完成sonargube 服務後,還需要安裝一個分析工具,可以用runner 或者scanner ,本文采用scanner ,它與sonargube的關係可以大致理解爲客戶端和服務端。

      首先通過下面的url下載scanner2.8版本:  https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip 並解壓部署到 /opt目錄下,完成後如下所示:

  

[root@cwqsolo opt]# ls  -ltr
total 20
drwxr-xr-x.  2 root root 4096 Nov 22  2013 rh
drwxr-xr-x   4 root root 4096 Nov  6  2016 cloudera
drwxr-xr-x   3 root root 4096 Nov  9  2016 remi
drwxr-xr-x  10 root root 4096 Oct  4 07:23 sonarqube-6.5
drwxr-xr-x   5 root root 4096 Oct  5 00:56 sonar-scanner-2.8
[root@cwqsolo opt]# 
  進入 scanner 目錄,並進入conf 目錄,修改sonar-scanner.properties  文件,與sonar前面的設置一致:

sonar.host.url=http://192.168.136.144:9000
sonar.login=admin
sonar.password=admin
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar123
sonar.jdbc.url=jdbc:mysql://192.168.136.144:3306/sonar?useUnicode=true&characterEncoding=utf8

     修改系統環境變量中/etc/profile 中的設置,在文件最後添加下面內容:

PATH=$PATH:/opt/sonar-scanner-2.8/bin  
export PATH

     通過以下命令進行啓動

    sonar-scanner -h

    啓動正確後,可以看到如下界面:


          scanner在於jenkins 進行集成的作用是:jenkins通過scanner傳入要分析的工程,scanner再將這些分析結果,傳給sonargube 進行呈現

四、在jenkins中配置sonar

1、jenkins中sonar插件的安裝

網頁上大部分都是在插件管理裏,可以找到sonarqube plugin,好吧,有點衰,我的jenkins插件管理裏面找不到這個插件,於是我只好採用phi 文件安裝方式:

        首先去這個url下載phi文件: http://updates.jenkins-ci.org/latest/sonar.hpi    這個是sonar最新插件,需要jenkins 2.6以上版本,可憐只好升級了一把jenkins。

        準備好hpi文件,並升級jenkins,重啓後,進入jenkins:

        jenkins -》插件管理-》高級



        

        點擊上傳,又是小等待後,重啓。

        2、配置 sonarqube server

         現在在進入jenkins-》系統管理-》系統配置後,就可以出現配置sonarqube server的地方了

         

        

      3、 配置sonar scanner

       由於上面我們已經安裝了scanner,所以這裏可以配置一下,不需要選擇自動安裝



          4、修改scanner參數

           配置完成後,進入工程,需要進行配置下面幾個sonar scanner參數:

             尤其需要注意紅框中的內容,低版不需要關注,但是高版本需要填寫,否則scanner 會報錯

          


         5、執行構建

             如果一切順利,構建後顯示本次構建爲藍色(成功),點開 sonarQube 就可以看到代碼分析工具給出的結果:

         

            最後通過SonarQube 來展現分析的結果:

              

    

五、異常

最後:總結一下各種坑

1、sonar.java.binaries property 屬性錯誤

高版本的sonar 會報告如下錯誤:Please provide compiled classes of your project with sonar.java.binaries property

    解決辦法: 

    在jenkins構建配置中, 加入此參數如:

    sonar.java.binaries=WebRoot/WEB-INF/classes  

   如果有多個目錄,用逗號隔開


2、scanner 報告  SVN錯誤

INFO: ------------------------------------------------------------------------
ERROR: Error during SonarQube Scanner execution
java.lang.IllegalStateException: Error when executing blame for file src/com/cyrx/webapp/action/CommonController.java
	at org.sonar.plugins.scm.svn.SvnBlameCommand.blame(SvnBlameCommand.java:86)
	at org.sonar.plugins.scm.svn.SvnBlameCommand.blame(SvnBlameCommand.java:59)
	at org.sonar.scanner.scm.ScmPublisher.publish(ScmPublisher.java:82)
	at org.sonar.scanner.phases.PublishPhaseExecutor.afterSensors(PublishPhaseExecutor.java:59)

    解決:

打開sonarqube的控制檯,使用admin登錄後 ,配置->SCM->菜單中,將Disabled the SCM Sensor設置爲true,                 





  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章