配合Gitlab CI部署SonarQube進行原始碼掃描

Hachibye
7 min readJul 17, 2024

--

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裡面

--

--

Hachibye
Hachibye

Written by Hachibye

字幕組退休勞工 ... DevOps/系統/雲端/資安

No responses yet