基於sonarqube、jenkins和gitlab的持續集成代碼檢查

在持續集成過程中,針對代碼的靜態檢查一般有兩個時間點:一是提交代碼的時候、二是提交merge request的時候,如果代碼檢查不通過,則可以直接拒絕此次代碼提交或者合併。下面我們介紹下在常見的devops工具鏈sonarqube、jenkins和gitlab下,實現在merge request提交的時候進行代碼檢查的方法。

jenkins端的配置

首先,我們在jenkins中安裝如下幾個插件:

  • gitlab plugin: https://wiki.jenkins-ci.org/display/JENKINS/GitLab+Plugin。此插件的主要作用是與gitlab集成,可以在代碼提交、merge request創建等情況下觸發jenkins進行構建,簡單講,就是在gitlab的webhook下觸發jenkins構建
  • sonarqube scanner for jenkins: http://redirect.sonarsource.com/plugins/jenkins.html。此插件的作用是調用sonar scanner進行代碼掃描,並可以將jenkins構建的結果以comments的形式添加到merge request中。從而方便後續code reviewer的查看。
  • sonar quality gates plugins: https://github.com/jenkinsci/sonar-quality-gates-plugin/blob/master/README.md。此插件的作用是讀取一個sonar project的quality gates結果,如果是失敗,則更改jenkins 構建的結果為失敗或者不穩定。

安裝完成之後,我們需要在gitlab端創建一個token供jenkins使用:登錄gitlab之後,點擊個人頭像那個地方,在settings頁的access token創建token,注意至少勾選api那的複選框

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

另外我們需要在sonarqbue端創建一個token供jenkins使用:登錄sonarqube後,點擊個人頭像那個地方,在My Account頁的tokens創建token。

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

然後我們進入jenkins的系統管理-系統設置,找到gitlab的配置塊:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

找到quality gates - sonarqube的配置塊:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

找到sonarqube server的配置塊:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

接下來,我們先建一個自由類型的項目,關鍵的配置如下:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

然後點擊Advanced按鈕,為本jenkins的構建生成一個token:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

在構建觸發器的地方,我們只勾選Opened Merge requests,也就是merge request創建的時候進行構建,大家注意截圖中有個webhook的url,該url後續需要填入到gitlab中。

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

在構建這個地方,我們選擇execute sonarqube scanner選項。gitlab在發往jenkins的hook中會發送一些變量供我們在jenkins中使用,大家可以參考:https://github.com/jenkinsci/gitlab-plugin#add-a-note-to-merge-requests,如下是個完整變量的截圖:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

在構建後操作,我們增加了2項:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

大家注意下:第一個是Quality Gates Sonarqube Plugin,這個讀取代碼掃描後的結果,如果分析失敗也就是沒有通過sonar的質量門,則此次構建的結果為FAILED。第二個是把此次構建的結果以note的形式添加到gitlab的merge request中。

到此,jenkins的配置完成。

gitlab端配置

我們進入gitlab的項目後,點擊settings-integration,也就是給項目添加一個webhook,hook的地址就是上面構建中出現的url,token是點擊advanced後創建的token,觸發器我們只選擇Merge request events好了,配置如下:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

驗證

下面我們在gitlab的項目裡面,創建一個merge request,之後,就可以在jenkins端看到觸發了sonarqube的代碼掃描,並在掃描完成之後,根據是否通過sonar的quality gates,把成功或者失敗的信息添加到了merge requests的note中:

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

DevOPS | 基於sonarqube、jenkins和gitlab的持續集成代碼檢查

總結

文章介紹使用jenkins和sonarqube做基於gitlab的merge request的代碼靜態檢查方法,實用性高。文章介紹的集成方法,除可用於代碼檢查外,同樣可以用於與gitlab集成的自動化測試、性能測試等,建議大家掌握。

另外一個擴展點,就是如果jenkins的構建不過,直接強制關閉gitlab的merge request,而不僅僅是添加一個note。


分享到:


相關文章: