前言
本篇文章主要介紹的是Jenkins+SonarQube+Gitlab搭建自動化持續代碼掃描質量平台的集成。
博客之前已經有關於Jenkins、SonarQube、Gitlab分別安裝的文章,本文主要說明三種平台集成使用,實現代碼持續集成與自動化部署。
一、jenkins集成gitlab
jenkins中添加gitlab插件,選擇直接安裝,然后服務器中重啟jenkins。


gitlab中生成AccessToken
打開gitlab,在gitlab中用戶設置—>訪問令牌選項中生成token,scope為第一個等級:api


jenkins中添加gitlab中生成的token
1.打開jenkins,在Jenkins添加全局憑據,類型為APIToken


2.使用Test connection驗證添加成功

安裝中可能出現的問題:
Manage Jenkins—>出現紅色報錯信息 pluginname is missing. To fix, install v** or later. 插件所依賴的其他插件,需要自己安裝。
解決方案:http://updates.jenkins-ci.org/download/plugins/中搜索報錯信息中對應的pluginname, 選擇合適的版本下載,然后手動上傳。最后服務器中使用systemctl restart jenkins.service重啟Jenkins
至此,Jenkins集成gitlab完成,接下來集成sonarqub后,將使用demo一起進行演示。
二、jenkins集成sonarqube
1.打sonarqube,點擊Administrator->security->user,點擊token按鈕,輸入key后再點擊generate進行生成,復制該token。


2.打Jenkins,Jenkins中安裝插件 SonarQube-scanner(插件版本為2.6.1),插件可在http://updates.jenkins-ci.org/download/plugins/ 中下載,瀏覽器中ctrl+f,搜索sonar。然后在Manage Jenkins-->Manage Plugins-->高級中,上傳插件,重啟Jenkins。
3.在系統管理->系統設置中,找到SonarQube servers模塊,填寫服務器信息

4.加載JDK與Sonar-scanner全局配置,jdk安裝目錄為Jenkins中jdk的安裝目錄,如果有默認配置,需要先刪除。



三、demo測試
gitlab部分
1.進入gitlab首頁,創建群組


2.在群組中創建一個項目


3.復制該項目的gitlab地址

4.打開資源管理器,新建一個文件夾作為 Git 代碼存放位置,進入該新建文
件夾后在空白處單擊鼠標右鍵,選擇“Git 克隆…”;

5.可能會有彈窗,要求輸入gitlab的賬號密碼,輸入即可。

6.克隆完成后,點擊關閉按鈕


7.上傳代碼測試,進入【demo】文件夾,將一份代碼復制至該目錄下;

8.在空白處單擊鼠標右鍵,選擇“Git 同步…”,在彈出的“Git 同步–TortoiseGit”對話框中點擊“拉取(P)”按鈕,同步項目在 Gitlab 服務器的版本;



9.在空白處單擊鼠標右鍵,選擇“Git 提交(C) ->”master”…”;


10.待提交成功后,點擊“推送(H)”按鈕,並在彈出的“推送 –TortoiseGit”對話框中勾選“推送所有分支(P)”,單擊“確定”按鈕完成代碼推送;


11.刷新gitlab頁面,發現上傳成功。

jenkins部分
PS:此實例目標為實現 Gitlab 中【demo】項目更新代碼時, Jenkins 同步更新代
碼並完成自動化部署。
1.登錄jenkins,單擊左側主菜單中的“新建 Item”按鈕,進入新建任務向導;

2.輸入任務名稱“demo”,選擇“Freestyle project”后點擊確定;

3.點擊“源碼管理”標簽,選擇“Git”單選框,輸入【demo】項目克隆鏈接,在“Credentials”單選框中添加憑證,然后選擇該憑證;

添加憑證;

4.配置 Webhook,點擊“構建觸發器”標簽,勾選“Build when a change is pushed to GitLab. GitLab webhook URL:...”,並點擊彈出菜單中的“高級…”按鈕;

5.點擊"Secret token"標簽右側的"Generate"按鈕生成 Token 密鑰,記錄該密鑰及該工程在 Jenkins中的URL(分別在如下圖"2"、"3"所示位置),點擊“保存”按鈕完成工程配置。

6.登錄 Gitlab 並進入【demo】項目,點擊左側菜單中“設置-集成”標簽;

7.在 URL 中鍵入剛剛獲取到的 Jenkins 工程 URL 及 Token 密鑰,點擊"Add webhook"按鈕完成 Gitlab 中【demo】項目配置;

8.出現【urlis blocked:Requests to the local network are not allowed】錯誤

解決方案:
gitlab 10.6 版本以后為了安全,不允許向本地網絡發送webhook請求,如果想向本地網絡發送webhook請求,則需要使用管理員帳號登錄,默認管理員帳號是root或者admin@example.com,密碼就是你gitlab搭建好之后第一次輸入的密碼,登錄之后,走下圖步驟:

重新走第六、七步驟。
9.向下滾動右側拖動條可見新建的 Webhook,點擊右側“Test”下拉框,選擇“Push events”測試 Webhook 配置,如顯示 Hook executedsuccessfully: HTTP 200 即表明 Webhook 配置成功;


10.重新切換到 Jenkins【demo】工程中可見 Jenkins 已成功響應 Gitlab的 Push 事件;

11.Push測試
打開資源管理器,進入【demo】項目文件夾,新建一個文本文檔;

在空白位置單擊鼠標右鍵選擇“Git 同步”並在彈出對話框中完成服務器代碼版本拉取;
同步服務器代碼版本后單擊鼠標右鍵選擇"Git 提交(C) ->"master"…"並在彈出對話框中完成變更提交



12.在 Jenkins 成功看到 Push 事件即表明 Jenkins 配置成功;

jenkins集成sonarqube部分
ps:此教程對 SonarQube 的使用全部基於 Jenkins 平台;
1.打開瀏覽器通過任意鏈接訪問Jenkins,進入Jenkins主頁;點擊【demo】項目進入項目主頁;

2.點擊左側菜單欄“配置”按鈕進入項目配置;

3.點擊"構建觸發器"標簽,在"構建"一欄中點擊"增加構建步驟"下拉框,選擇"Execute SonarQube Scanner";

4.在彈出的“Execute SonarQube Scanner”頁面中填入以下 Analysis properties 信息后單擊“保存”按鈕完成項目配置;
# 項目標識符,在給定的 SonarQube 中必須是唯一的
sonar.projectKey=lxgblog:demo
# 項目名稱,這是 SonarQube 中顯示的名稱
sonar.projectName=demo
# 項目版本號
sonar.projectVersion=1.0
# 以下定義可在項目根目錄新建 sonar-project.properties 文件, SonarQube 會默認讀取該文件,
# 指定工程源文件所在的目錄, "./"可表示根目錄,在 Windows 系統使用時注意用"/"代替"\"
sonar.sources=./src
# 針對 JAVA 工程,需要指定 class 文件所在的目錄
sonar.java.binaries=./target/classes
# 指定工程編程語言
sonar.language=java
# 指定工程字符編碼
sonar.sourceEncoding=UTF-8

5.Build 測試,回到【demo】項目主頁,單擊左側菜單欄“Build Now”按鈕進行代碼編
譯,可以在 Build History 中實時看到編譯過程,編譯完成后會生成一個新的構建歷史#4
(ps:#3被我刪了);
6.點擊“#4”按鈕進入 4 號構建過程,點擊左側菜單欄“控制台輸出”按鈕可以看到本次項目構建的詳細過程(有興趣的可以看看整個工程構建及代碼分析過程);



7.回到【demo】項目主頁,點擊左側菜單欄"SonarQube"按鈕將跳轉到SonarQube 項目名為【demo】的主頁即可看到代碼分析的結果;


CSDN:https://blog.csdn.net/qq_27682773
簡書:https://www.jianshu.com/u/e99381e6886e
博客園:https://www.cnblogs.com/lixianguo
個人博客:https://www.lxgblog.com

