1、下載Sonar GitLab Plugin 4.1.0
官方地址:https://github.com/gabrie-allaigre/sonar-gitlab-plugin
直接下載地址:https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fgabrie-allaigre%2Fsonar-gitlab-plugin%2Freleases%2Fdownload%2F4.1.0-SNAPSHOT%2Fsonar-gitlab-plugin-4.1.0-SNAPSHOT.jar
⚠️:Only SonarQube < 7.7, because preview mode is removed
下載完成之后,放到如圖所示目錄下:
2、下載:SonarQube 7.6
官方地址:https://github.com/SonarSource/sonarqube
啟動sonarQube:
默認訪問地址:http:localhost:9000
默認賬號密碼:admin admin
3、搭建gitlab
- 搭建過程省略
- 新建一個User Token
- 然后將sonarQube用戶,添加到需要檢測的項目中,分配"開發者"權限
4、sonarQube 關聯gitlab:
- Gitlab url:填寫gitlab訪問地址
- Gitlab User Token: 就是第三步創建完的access token
5、安裝gitlab-runner:
我本地是mac,所以直接執行:brew install gitlab-runner
如果是linux系統,則按照如下步驟安裝:
- 注冊runner:
注冊runner,你需要有一個項目,並且需要至少master權限。
進入到項目,左側點擊settings->CI/CD頁面,選擇第二項Runners settings
- 在安裝gitlab-runner所在機器上執行如下注冊流程:
1、Add GitLab’s official repository: 添加官方倉庫 curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
2、Install the latest version of GitLab Runner: 安裝最新版本 sudo yum install gitlab-runner
3、To install a specific version of GitLab Runner: 安裝指定版本 yum list gitlab-runner --showduplicates | sort -r sudo yum install gitlab-runner-10.0.0-1
4、更新gitlab-runner sudo yum update sudo yum install gitlab-runner
5、注冊runner:
[root@s102 /]# gitlab-runner register # 輸入 GitLab 地址 Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://192.168.0.110/ # 輸入 GitLab Token, 此處的token為上圖中該項目針對runner的token值 Please enter the gitlab-ci token for this runner: oApF5Y_f1NRfCfeNbE5WRx # 輸入 Runner 的說明, 可以為空 Please enter the gitlab-ci description for this runner: gitlab-runner # 設置 Tag,可以用於指定在構建規定的 tag 時觸發 ci Please enter the gitlab-ci tags for this runner (comma separated): deploy # 這里選擇 true ,可以用於代碼上傳后直接執行(根據版本,也會沒有次選項) Whether to run untagged builds [true/false]: true # 這里選擇 false,可以直接回車,默認為 false(根據版本,也會沒有次選項) Whether to lock Runner to current project [true/false]: false # 選擇 runner 執行器,這里我們選擇的是 shell Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh: shell
如果是docker安裝的,則需要如下:
Please enter the Docker image (eg. ruby:2.1):
alpine:latest
url:私有git的路徑
token:項目的token,用於關聯runner和項目
name:runner的名字,用於區分runner
tags:用於匹配任務(jobs)和執行任務的設備(runners)
executor:執行環境
備注:當我們完成設置后,可通過vi ~/.gitlab-runner/config.toml
打開runner 的配置文件看到之前配置的內容
官方示例:https://docs.gitlab.com/runner/register/
啟動gitlab-runner:
cd ~ gitlab-runner install gitlab-runner start
6、配置maven:
下載版本:maven:3.6.3-jdk-8
配置文件:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>/usr/share/maven/ref/repository</localRepository> <mirrors> <!--配置私有maven鏡像--> <mirror> <id>nexus-private</id> <mirrorOf>central</mirrorOf> <name>Nexus osc</name> <url>http://127.0.0.1/repository/maven-central/</url> </mirror> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings>
7、開啟gitlab CI
在項目根目錄下添加文件:.gitlab-ci.yml
stages: - scan sonar-check: stage: scan tags: - code-check script: - mvn clean verify -Dmaven.test.skip=true - mvn -e -X --batch-mode sonar:sonar -Dsonar.host.url=http://127.0.0.1:7777 -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME -Dsonar.gitlab.project_id=$CI_PROJECT_ID -Dsonar.issuesReport.html.enable=true -Dsonar.analysis.mode=preview #設置后,sonar不創建項目,只做分析
提交后,在gitlab項目界面,查看流水線即可查看執行狀態。
靜態分析:
mvn --batch-mode sonar:sonar \ -Dsonar.host.url=http://10.236.65.36:9000 \ -Dsonar.login=wanyang3 \ -Dsonar.password=****** \ -Dsonar.issuesReport.html.enable=true \ -Dsonar.analysis.mode=preview \ -Dsonar.preview.excludePlugins=issueassign,scmstats
mvn --batch-mode verify sonar:sonar \ -Dsonar.host.url=http://10.236.65.36:9000 \ -Dsonar.login=wanyang3 \ -Dsonar.password=****** \ -Dsonar.analysis.mode=preview \ -Dsonar.gitlab.project_id=$CI_PROJECT_ID \ -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \ -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
說明:sonar.gitlab.* 參數為插件可使用變量,每個變量有不同的用處,具體可參考 Sonar Gitlab Plugins properties,$CI_PROJECT_ID,$CI_COMMIT_SHA,$CI_COMMIT_REF_NAME 等變量為 GitLab CI 變量,可以在 CI 流程中直接使用這些變量
具體可參考 GitLab CI Variables:https://docs.gitlab.com/ce/ci/variables
8、Issues Report Plugins
Issues Report Plugins 介紹
使用 Issues Report Plugins 插件可以為我們生成一份 HTML 格式的問題報告,對於開發人員來說是很有好處的,我們可以在改動代碼后 Push 代碼到倉庫前,檢測一下代碼質量,生成問題報告,提醒自己避免提交有明顯問題的代碼到倉庫中,當然也可以去 SonarQube Web 上查看詳細情況。
Issues Report Plugins 使用
Issues Report Plugins 插件的使用很簡單,只需要 Maven 命令行指定參數執行即可。注意:SonarQube > 5.1 版本,該插件已經過時了,不過我們還是直接可以使用,免安裝。5.1 版本以后由 SonarLint 替代該插件。
mvn sonar:sonar -Dsonar.analysis.mode=preview # 設置 mode,默認為preview -Dsonar.issuesReport.lightModeOnly=true # 設置是否只生成新增問題的報告 -Dsonar.issuesReport.html.enable=true # 設置生成 HTML 格式的報告 -Dsonar.issuesReport.html.name=xxxx # 設置生成 HTML 報告的文件名字 -Dsonar.issuesReport.html.location=/xx/xx # 設置生成 HTML 報告的文件存儲路徑 -Dsonar.issuesReport.console.enable=true # 設置報告輸出到控制台
當設置-Dsonar.issuesReport.html.enable=true時,該插件默認會生成兩份 HTML 報告,一份是包含所有問題的報告 ,一份為只包含新增問題的報告 ,除非設置了-Dsonar.issuesReport.lightModeOnly=true,則只生成包含新問題的報告。
默認生成報告的路徑為<maven_project>/target/sonar/issues-report/,使用-Dsonar.issuesReport.html.location 可修改生成路徑。
報告默認文件名為 issues-report.html (全部問題報告),issues-report-light.html(新增問題報告),使用-Dsonar.issuesReport.html.name=xxxx 可修改生成的文件名稱。
當設置-Dsonar.issuesReport.console.enable=true時,則不會生成HTML文件報告,會將檢測結果打印到控制台輸出。
參考其他:
GitLab-CI與GitLab-Runner:https://www.cnblogs.com/cnundefined/p/7095368.html