Jenkins+Sonar質量門禁【實踐篇-maven版】

隨風.浮萍發表於2021-12-28

Jenkins+Sonar質量門禁【實踐篇-maven執行版】

配置文件百度挺多的,就不展開來了,找類似這種參考文件:

https://www.tpisoftware.com/tpu/articleDetails/563

首先很遺憾的告訴大家,maven版做不了質量門禁!只能掃描!!!

效果撐死,只能做到這樣:

 

     就我們公司專案裡,jenkins建的maven任務是最多的,所以我也首選用maven專案測試,然而11月尾叫了解,各種測試下來沒有進展。那時還特意去官網註冊,生成SonarQube token,配置到jenkins憑證上,以便在jenkins釋出中使用token代替賬號密碼的方式去操作sonarqube,還下載中文漢化包進行漢化。

  然而配置任務釋出報錯:Exception in thread "main" java.lang.NoClassDefFoundError: org/sonar/batch/bootstrapper/IssueListener,SonarQube scanner exited with non-zero code

  搞了1~2天,從此被抓去幹別的活了。。。沒錯,就是去搞虛擬機器遷移,因為公司買了新伺服器,需要把偽伺服器(家用桌上型電腦改造的linux系統,裝了個virtualbox)的虛擬機器遷移到新伺服器上(2網段)。而這臺測試機器剛好也要挪走,話說當時想直接把jenkins裝在系統上,而不是docker上,因為想著以後一直用。

  安裝過程有個詭異的問題,不知道是不是2網段跟預設0網段有什麼衝突,各種方式裝jenkins(java -jar war包、tomcat跑war包,甚至yum 直接裝),無一不遇到首次安裝jenkins,外掛安裝失敗問題:

不要告訴我這個方法:

1 sed -i 's#http://updates.jenkins-ci.org/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g;s#http://www.google.com#https://www.baidu.com#g' default.json
2 
3 http://jenkins訪問ip/jenkins/pluginManager/advanced 
4 上面的 Update Site url 改成 mirrors.tuna.tsinghua.edu.cn 。。。

    試過很多遍,無解。竟然改完之後,重啟jenkins,修改過的配置檔案還是沒改過前的。且考慮到,裝完之後還要配置很多東西,什麼git、java、maven,還要根據報錯資訊裝缺漏的外掛。。。    

  無奈只能搞回docker版的jenkins,話說docker恢復安裝環境確實快。

1、恢復映象:原伺服器上docker save,新伺服器docker load 

2、資料恢復:各種對映到宿主機的資料目錄拷貝複製

3、恢復服務:docker run -v 跑起來即可

 

上面都是流水文,交代下背景,下面乾貨來了!

  話說我在jenkins建的maven專案裡,報錯資訊看不到解決辦法。所以乾脆模擬整個過程:進去docker jenkins裡面,git 拉專案,然後手動執行sonar掃描。

  因為公司專案不敢在pom.xml 新增東西,所以借來了小俊子給的helloworld java 專案。然後掃描成功了。

首先貼上maven配置

為啥要貼上這個Build圖,到時pipeline篇會提到

 

 Post Steps加上Analysis properties配置,如下:

sonar.login=admin    
sonar.password=admin
# 專案key 保證唯一
sonar.projectKey=java
# 專案名字
sonar.projectName=xxxx-test-maven
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8

# sonar.sources是原始檔所在的目錄
sonar.sources=src/main/java
sonar.projectBaseDir=.
# 指定class目錄 從sonarQube 4.12開始,sonar將會進行程式的動態檢查,不配置sonar.java.binaries屬性將會出錯
sonar.java.binaries=target/classes

1、進去jenkins容器

docker exec -it xxxx bash

2、進入jenkins worksapce目錄

3、克隆hello-world.git專案

(趁某俊把這個專案還是設定公開,大家有需要趕緊下下來,哈哈哈,我已經粘到我gitee上了,下一篇會說到)

git clone https://gitee.com/xie-zijun/hello-world.git

4、修改pom.xml 檔案,新增外掛引入:

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.2</version>
</plugin>

加個題外話,其實我們公司maven專案也能加,因為這堆程式碼要放到build和plugins裡面的,如果pom.xml沒有這兩個標籤,加上去即可。就是下面這個意思:

<!--maven打包外掛-->
  <build>
      <plugins>
        上面那坨程式碼
    </plugins>
 </build>

4、手動執行掃描

bash-5.1# /usr/local/maven/bin/mvn install sonar:sonar -Dsonar.host.url=http://192.168.2.170:9090

 5、瀏覽器進去sonar頁面看:

  其實上面手動掃描執行成功之後,基本已經沒啥大問題,配置到jenkins上的maven專案裡,釋出就行了。(特別注意要在pom.xml新增外掛引入程式碼,因為要借用jenkins容器裡面的sonar scaner工具去掃描) 

當我歡喜地給我領導看效果時候,他不是要這種效果(我還歡喜地想把這個sonar客戶端裝到一臺windows虛擬機器上,讓開發他們為所欲為,裝到一半的時候才說不是要這種效果 = =)

  他要檢測到程式碼bug之後,不讓進行下一步釋出操作,讓開發改好bug再發布。。。

相關文章