.net持續整合sonarqube篇之 sonarqube與jenkins整合(外掛模式)

周國通發表於2019-07-31

系列目錄

Jenkins通過外掛整合Sonarqube

通過上一節我們瞭解瞭如何配置以使jenkins ci環境中可以執行sonarqube構建,其實Sonarqube官方也提供了jenkins外掛以便更方便的管理.使用外掛來執行sonarqube專案有以下優點

1.可以很清楚的看到專案是Sonarqube專案,如下圖示

avatar

Sonarqube的begin,end不需要手動寫,而是自動選擇,專案名稱,專案版本一目瞭然.不需要檢視cmd資訊.有點流水線的感覺.

2.更好地與Sonarqube整合,請看下圖

avatar

我們可以看到使用Sonarqube外掛的專案是這樣的,能夠在jenkins頁面展示專案的狀態和sonarqube服務端的處理狀態,我們點選圖中的與sonarqube相關的圖示會自動進入Sonarqube web管理頁面,並且自動定位到本專案,這樣如果構建專案特別多的情況下給我們帶來很多方便.

3.與Jenkins PipeLine整合

以上僅僅是方便之處,然而並沒有顯示出外掛無可取代之處,它的無可取代之處在於使用jenkins PipeLine時必須使用此外掛.

說了這麼多,下面介紹如何安裝配置sonarqube Jenkins外掛.

進入Jenkins外掛管理介面,切換到'available'介面,輸入sonarQube Scanner然後安裝(關於jenkins外掛安裝前面章節有講到,這裡不再贅述).安裝完成以後開始配置.

工具選項配置

進入Manage Jenkins>Global Tool Configuration

找到sonarqube for msbuild配置如下

avatar
其中名稱可以隨便選擇,只要方便管理即可.

再找到sonarqube scanner,配置如下

avatar
配置完成後點選最下面的save儲存

點選完儲存之後,我們再進入config system找到sonarqube servers配置如下

avatar

serverurl要根據實際情況配置,如果sonarqube和jenkins並不在同一臺機器,則需要配置ip地址.

下面我們新建一個自由式任務.名稱為mysonar(名稱隨意)
進入到Build欄目,點選Add Build Steps,我們從來拉列表中選擇Sonarqube開始標識(通過前面的章節我們瞭解到,sonarqube構建包括開始標記,結束標記,然後中間是msbuild構建)

avatar

點選後會出現以下配置項,按實際情況配置即可

avatar
指定專案名,key(key可以任意起名,只做為惟一標識,並不是ssh登陸類似的key)

然後再新建一個執行bat的步驟.如下圖

avatar

這裡很普通,指定一個要編譯的專案,需要注意的是我這裡有環境變數msbuild,如果找不到請新增環境變數或者指定msbuild完整路徑.

然後再新增一個步驟,這次選擇SonarScanner for msbuild -end analysis.

然後點選確定完成建立,我們點選build now觸發一次構建.

構建成功後資訊如下圖

avatar
我們點選紅色框先的任意一項,就可以跳轉到sonarqube web管理介面,如下圖示

avatar

需要注意的是第一次執行並不能構建成功,這是因為Jenkins需要下載相關外掛,外掛下載成功後我們進入Jenkins\tools\hudson.plugins.sonar.MsBuildSQRunnerInstallation目錄下的你的 SonarScanner for MSBuild的名字,它就是你在Global Tool Configuration>SonarScanner for MSBuild指定的名稱,進去以後找到SonarQube.Analysis.xml對它進行配置,關於此檔案的配置前面我們講到過,這裡不再贅述.

Sonarqube外掛整合單元測試覆蓋報告

回憶前面章節,新增sonarqube單元測試覆蓋率報告需要額外執行一步執行單元測試的程式碼,這並不是重點,重點在於如何在Begin Analysis部分指定單元測試執行檔案,這裡通過指定Additional arguments來實現,如下圖示

avatar

然後再在msbuild構建完成後新增一步執行單元測試的程式碼(可以複製前面的程式碼)就行了,這裡需要說明的是前面為了方便講解我們是在專案目錄下執行指令碼,使用了%CD%這樣的相對路徑,Jenkins中建議換成絕對路徑,以防出現不必要的麻煩.

完了再進入Sonarqube web管理介面,就可以看到有單元測試覆蓋率報告了

avatar

Token方式與Sonarqube server互動

上一節我們講解了通過配置SonarQube.Analysis.xml方式實現與Sonarqube server互動(實際上我們執行構建的時候sonarqube runner是通過http方式把資料提交到sonarqube server),這樣做有非常明顯的缺點.第一是安全問題,我們知道其實我們是把admin的使用者名稱和密碼寫入了SonarQube.Analysis.xml檔案裡,這樣很容易暴露管理員賬戶,在企業生產環境中,如果有惡意的人獲取了管理員賬戶,則可以進行任意構建,然後觸發布,這樣會造成非常嚴重的後果,即使被沒有惡意的開發者獲取到,開發者可能出於好奇心在生產環境中進行測試嘗試,這樣也可能會造成非常嚴重的後果.第二是管理很不方便,如果在生產環境的jenkins是分散式的,那麼我們進入每一臺伺服器更改配置檔案是很不方便的,如果管理員賬戶和密碼更改了還要進入每臺伺服器更改,雖然現在有各種自動化的工具使得這種操作不是特別麻煩的問題,但是集中的配置更加方便維護.下面我們講解如何通過在Jenkins中為Sonarqube server新增token來解決以上兩個問題.

在Sonarqube裡生成token

首先需要說明的是,只有管理員賬戶可以生成token,其它賬戶不可進行此操作.我們進入sonarqube web管理介面,執行以下操作

avatar

進入我的賬戶後security標籤,可以看到如下介面

avatar

我們在紅框內的文字框裡輸入key的名字,此時Generate按鈕變為啟用狀態,我們點選一下就可以生成一個token

avatar

我們點選copy或者直接複製把token儲存到文字文件或者其它地方,需要注意的是token必須儲存,退出這個頁面後token的值就會消失(這裡說的消失是指不再顯示,而不是真正的消失).

把生成的token新增到Jenkins裡

我們再回到jenkins,進入Manage Jenkins>configure system找到SonarQube servers把token貼上到Server authentication token

avatar

需要注意的時,如果已經在SonarQube.Analysis.xml配置了賬號密碼,則需要刪除掉,即刪除以下程式碼

<Property Name="sonar.login">admin</Property>
<Property Name="sonar.password">admin</Property>

相關文章