天天看點

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

Jenkins+Sonar品質門禁【實踐篇-maven運作版】

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

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

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

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

Jenkins+Sonar品質門禁【實踐篇-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,插件安裝失敗問題:

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

不要告訴我這個方法:

    試過很多遍,無解。竟然改完之後,重新開機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篇會提到

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

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

1、進去jenkins容器

docker exec -it xxxx bash

2、進入jenkins worksapce目錄

3、克隆hello-world.git項目

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

4、修改pom.xml 檔案,添加插件引入:

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

參考:https://blog.csdn.net/zwk_sys/article/details/105103691

4、手動運作掃描

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

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

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

  其實上面手動掃描運作成功之後,基本已經沒啥大問題,配置到jenkins上的maven項目裡,釋出就行了。(特别注意要在pom.xml添加插件引入代碼,因為要借用jenkins容器裡面的sonar scaner工具去掃描) 

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

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