SonarQube (終) Gitlab提交代碼自動化測試

SonarQube系列 目錄


整體架構圖

架構圖.png
  1. 軟件開發工程師提交代碼至Gitlab;
  2. 觸發Gitlab-CI,啟動gitlab-runner Docker鏡像準備運行測試;
  3. Gitlab-CI觸發sonar_runner Docker鏡像啟動,并進行代碼分析;
  4. 代碼分析結果在commit記錄作一次comment;
  5. Gitlab管理員合并代碼至develop或master分支;
  6. 觸發Gitlab-CI,啟動gitlab-runner Docker鏡像準備運行測試;
  7. Gitlab-CI觸發sonar_runner Docker鏡像啟動,并進行代碼分析;
  8. 代碼分析結果保存至SonarQube平臺數據庫中;
  9. 測試/開發組等用戶訪問SonarQube網頁,查看分析的具體結果。

具體配置過程

sonar-scanner Docker鏡像配置

sonar-scanner Docker鏡像主要工作:

  1. 拉取代碼;
  2. 運行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 token.png

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插件.png

創建gitlab-ci.yml配置文件

以下為實現兩種Pipline流程的yml文件:

  1. Sonar_Analyze流程,執行sonar-scanner操作,直接將分析結果保存至SonarQube server中;
  2. 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分支的代碼修改觸發的分析

提交代碼結果1.png

develop/master分支的代碼修改觸發的分析

提交代碼結果2.png

參考

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • DevOps是Development和Operations的組合,是一種方法論,是一組過程、方法與系統的統稱,用于...
    DongGuangqing閱讀 2,353評論 1 7
  • GitLab-CI就是一套配合GitLab使用的持續集成系統。 OS X系統完成可出現集成,需要安裝gitlab,...
    paradisery閱讀 4,456評論 7 7
  • <<互聯網敏捷DevOps和自動化之5.持續集成>>持續集成的價值是什么?對于開發和測試人員又意味著什么呢?1.1...
    燕京博士閱讀 2,818評論 0 5
  • 爸爸:“兒子你覺得爸爸壯嗎?” 兒:“嗯?!?爸爸:“你覺得少林功夫厲害嗎?” 兒子:“厲害?!?爸爸:“如果我剃...
    Wendyzhen閱讀 225評論 0 0