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再發布。。。