SonarQube系列 目錄
- SonarQube (1) 基本環境搭建
- SonarQube (2) sonar runner安裝配置
- SonarQube (3) C++插件安裝與規則配置
- SonarQube (4) 運行一個Sample
- SonarQube (5) 集成至Jenkins
- SonarQube (終) Gitlab提交代碼自動化測試
整體架構圖
- 軟件開發工程師提交代碼至Gitlab;
- 觸發Gitlab-CI,啟動gitlab-runner Docker鏡像準備運行測試;
- Gitlab-CI觸發sonar_runner Docker鏡像啟動,并進行代碼分析;
- 代碼分析結果在commit記錄作一次comment;
- Gitlab管理員合并代碼至develop或master分支;
- 觸發Gitlab-CI,啟動gitlab-runner Docker鏡像準備運行測試;
- Gitlab-CI觸發sonar_runner Docker鏡像啟動,并進行代碼分析;
- 代碼分析結果保存至SonarQube平臺數據庫中;
- 測試/開發組等用戶訪問SonarQube網頁,查看分析的具體結果。
具體配置過程
sonar-scanner Docker鏡像配置
sonar-scanner Docker鏡像主要工作:
- 拉取代碼;
- 運行sonar-scanner。
因此需要先下載sonar-scanner并配置環境變量等,保證sonar-scanner能夠運行,并能將結果提交至SonarQube平臺。
sonar-scanner安裝
此處假設已有一個基礎鏡像
啟動基礎鏡像
下載sonar-scanner壓縮包: SonarQube Scanner
解壓至目標目錄<install_directory>(如 /etc)
更新 <install_directory>/conf/sonar-scanner.properties 文件中如下內容
#----- Default SonarQube server
#sonar.host.url=http://localhost:9000
如:
#----- Default SonarQube server
sonar.host.url=http://192.168.2.465:9000
- 將<install_directory>/bin添加到PATH中
export PATH=<install_directory>/bin:PATH
- 保存docker鏡像,并命名為sonar-scanner
docker commit ID sonar-scanner
gitlab-runner Docker鏡像配置
- 拉取gitlab-runner Docker鏡像
docker pull gitlab/gitlab-runner:latest
- 啟動gitlab-runner
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
- 注冊runner
# docker exec -it gitlab-runner gitlab-ci-multi-runner register
填寫內容說明:
gitlab-ci coordinator URL: 期望設置的gitlab-ci URL;
gitlab-ci token: 從“目標Gitlab項目>setting>CI/CD Pipelines>Specific Runners”獲??;
gitlab-ci tag: runner的標識,在yaml文件中注明所選擇的runner時需要用到(實例:yx-46);
executor: 此處gitlab-runner安裝于docker鏡像中,因此選擇doker;
default Docker image: gitlab-ci觸發時默認拉取的docker鏡像,此處可以填寫sonar-scanner
- 填寫如下內容:
Please enter the gitlab-ci coordinator URL:
# http://192.168.2.46/ci
Please enter the gitlab-ci token for this runner:
# 項目的 token
Please enter the gitlab-ci description for this runner:
# Runner 的 description
Please enter the gitlab-ci tags for this runner (comma separated):
# Runner 的 tag
Whether to run untagged builds [true/false]:
# true
Please enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine:
# docker
Please enter the default Docker image (e.g. ruby:2.1):
# 填入構建 Docker image 時填寫的 image 名稱
若無意關閉gitlab-runner,再次啟動前需要移除原來容器記錄
docker stop gitlab-runner && docker rm gitlab-runner
再執行啟動鏡像的操作即可
docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest
sonar gitlab-plugin配置
插件安裝
admin 登錄 SonarQube,點擊 配置 —> 系統 —> 更新中心 —> Available —> Search,輸入 GitLab,在列表中點擊 install 安裝,安裝完畢后重啟 SonarQube 即可
獲取Gitlab帳戶 Private token
建議新建一個SonarQube用戶并賦讀權限,對測試結果的評論由此賬戶發出更為直觀
登錄Gitlab帳號,點擊 setting > Account,復制Private token
配置sonar gitlab-plugin
admin 登錄 SonarQube,點擊 配置 —> 通用配置 —> GitLab —> Reporting —> 設置 GitLab User Token 以及 GitLab url
創建gitlab-ci.yml配置文件
以下為實現兩種Pipline流程的yml文件:
- Sonar_Analyze流程,執行sonar-scanner操作,直接將分析結果保存至SonarQube server中;
- Sonar_Preview流程,執行sonar-scanner操作,模式為preview,在分析結束后將結果評論在commit記錄中。
.gitlab-ci.yml內容:
image: sonar
Sonar_Analyze:
script:
- source /etc/profile.d/sonarrc.sh
- sonar-scanner
only:
- develop
tags:
- yx-gitlab-runner
Sonar_Preview:
script:
- source /etc/profile.d/sonarrc.sh
- sonar-scanner -Dsonar.analysis.mode=preview -Dsonar.gitlab.commit_sha=$CI_BUILD_REF -Dsonar.gitlab.ref_name=$CI_BUILD_REF_NAME -Dsonar.gitlab.project_id=$CI_PROJECT_ID
except:
- develop
tags:
- yx-gitlab-runner
運行結果
非develop/master分支的代碼修改觸發的分析
develop/master分支的代碼修改觸發的分析
參考
https://docs.gitlab.com/runner/register/
https://docs.gitlab.com/ee/ci/yaml/README.html
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
http://blog.csdn.net/aixiaoyang168/article/details/72168834
http://blog.csdn.net/aixiaoyang168/article/details/78115646