Deploy SonarQube with Gitlab CI for source code scanning
首先附上官方腳本
version: "3"
services:
sonarqube:
image: sonarqube:community
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db:
image: postgres:12
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
預設帳號密碼admin / admin
第一次登入需修改密碼
啟動中
登入之後長這樣,會詢問你是否要import導入,這裡不導入
回到Gitlab事先申請好access token
最低所需權限:api,read_user,read_registry
回來SonarQube點import就看得到專案,這裡不導入
設定裡面可以配置專案的branch名稱
手動新建專案 Create a local project
連動到Gitlab CI(也可以選本地掃描)
有三個步驟要執行
- 新增變數SONAR_TOKEN
裡面的值是點擊「Generate a token」之後產生的
取消打勾Protect Var,打勾Mask Var
- 新增變數SONAR_HOST_URL
裡面的值是你的SonarQube Server(也就是後台)安裝的主機位置
取消打勾Protect Var,打勾Mask Var
再來
- 新增一個sonar-project.properties檔案
回到Gitlab的專案底下新增
內容輸入上面提供的,也可以自由調整配置
sonar.projectKey=<剛才在sonarqube建立專案時的名稱key>
sonar.qualitygate.wait=true
# 其他參數參考
# sonar.sourceEncoding=utf-8
# sonar.python.version=3.8
# 專案主語言(多語言可以留空)
# sonar.language=
# 原始碼路徑
# sonar.sources=.
# 忽略文件路徑
# sonar.exclusions=**/vendor/**,**/node_modules/**
# 包含文件路徑
# sonar.inclusions=**/*.go,**/*.py,**/*.js
回頭建立一台Gitlab Runner
#拉取映像
docker pull gitlab/gitlab-runner:ubuntu-v16.2.0
#啟動程序
docker run -itd --net=host --privileged=true --name <你的runner名稱> --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker gitlab/gitlab-runner:ubuntu-v16.2.0
確認運行之後,到Gitlab專案層級底下申請一台runner
Build > Runners > New Group Runner > Create Runner > 記下這組token
回到runner運行的主機進行註冊
#註冊步驟,注意類型executor需為docker即可
gitlab-runner register \
--non-interactive \
--executor "docker" \
--url "<你的gitlab網址>" \
--registration-token "<上一步拿到的token>" \
#驗證註冊信息
gitlab-runner verify
最後撰寫Gitlab專案底下的.gitlab-ci.yml這個CI腳本
sonarqube-check:
stage: sonarqube-check
tags:
# name of gitlab runner tag
- <剛才在gitlab上註冊runner的名字>
image:
name: sonarsource/sonar-scanner-cli:5.0
entrypoint: [""]
variables:
GIT_DEPTH: 0
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner
allow_failure: true
only:
#指定行為
- merge_requests
#指定分支
- main
觸發CI之後開始運行
掃描結束之後就能回後台確認結果囉
社群版沒有導出report的功能,需要額外付費喔
注意點:
- Gitlab Runner的excutor需要為“docker”
- TOKEN和URL等參數可以寫在專案的Gitlab CI/CD Var裡面
- 其他參數也可以寫在sonar-project.properties裡面
- 其他參數也可以寫在CI腳本的var裡面