Sonarqube是一個開源的代碼品質檢測工具,可以單獨使用,也可以作為一個檢測步驟放在Jenkins的pipeline CI/CD 流水線。簡單的了解,他通過一個snarqube scanner 的工具來掃描代碼,然後把結果發給 sonarqube server,使用者可以在這個sonarqube server的網頁界面檢視報告。

每次運作的時候,他會通過一系列條件檢測,我們可以看見這些檢測的内容,這些檢測的内容叫做 quality gate,他最後會顯示我們的檢測結果是passed或者 failed
當我們把Jenkins和 sonarqube整合的時候,Jenkins調用 sonarqube scanner 掃描,把結果發送給sonarqube 伺服器,然後伺服器完成報告之後,通過 webhook再把結果發過Jenkins,Jenkins根據結果判斷是否繼續運作pipeline
本地測試一般可以使用docker-compose 的方式直接部署容器,而且docker-compose有個好處是裡面定義的服務,都會預設放入同一個網段,可以直接彼此通過服務名進行通路。
首先建立一個docker-compose.yaml
執行 docker-compose up -d 就可以啟動了
值得注意的一點是Docker的記憶體配置設定,如果記憶體不足,那麼容器啟動之後會自動關閉!豆子用的是Macbook Pro,需要注意調整Docker Desktop的記憶體。
啟動之後,我們可以通過 http://127.0.0.1:9000 來通路 sonarqube, 和 http://127.0.0.1:8080 來通路 Jenkins
接下來在我們配置Jenkins之前,我們可以直接測試一下 sonarqube是否工作。我直接通過sonarqube scanner的容器來通路我的代碼,并把結果發回給伺服器。這些參數可以通過指令行傳遞,也可以通過 sonar-project.properites這個檔案配置。
等待1分鐘之後 就可以看見結果了
确認sonarqube 工作之後,我們來Jenkins裡面配置一下。
Manage Jenkins - Manage Plugins - 安裝 sonarQube Scanner for Jenkins的插件
然後我們要在sonarqube裡面需要生成一個token,Jenkins裡面需要這個token進行驗證。
sonarqube裡面,右上角點選 my account - > security, generate tokens
Jenkins 裡面,Manage Jenkins - >Configure System , 然後添加server的 URL和 token
然後進入 Jenkins的 Manage Jenkins - Global Tool Configuration , 安裝 SonarQube Scanner
最後,我們還需要在sonarqube上配置 webhook,當掃描結束的時候,他會自動通知Jenkins
sonarquebe - administration - webhooks
準備就緒之後,我們就可以寫我們的pipeline檔案了。作為對比,我們寫兩個pipeline,一個是品質比較好的代碼,一個是比較差的。pipeline裡面有三個stage,分别是下載下傳代碼, 掃描代碼,以及quality gate的結果判斷是否繼續
好代碼
差代碼
執行pipeline,我們可以看見結果
Good code
Bad code