Gitlab 提供了基於 Code Climate
的代碼質量評估功能,這一功能是經過 dind(Docker in Docker)方式運行的,在 Kubernetes 環境中、尤爲是託管集羣中,這種方式不太合適,還好還有一個替代方案:Sonarqube,經過在 .gitlab-ci.yml
中的設置,能夠使用 Sonarqube 對代碼進行掃描,接收到 Commit 以後,Sonarqube 會生成針對提交的代碼質量提示,如圖所示:java
過程也並不複雜,簡單的部署一個 Sonarqube 服務,並在 Gitlab CI 中調用便可。git
配置 Gitlab
這個步驟很簡單,只要打開頁面 profile/personal_access_tokens
,新建 Token 備用便可。github
啓動 Sonarqube
在 Kubernetes 環境中啓用一個簡單的 Sonarqube 服務器是很方便的,具體說明能夠參看官方 Docker 鏡像的說明,這裏有幾個重點:api
數據:該鏡像內置 H2 存儲,在生產環境中使用天然是不合適的,能夠經過環境變量,使用外部的 MySQL 或者 PostgreSQL 服務器。服務器
持久化:該鏡像的數據目錄爲
/opt/sonarqube/
,下面的data
、logs
、conf
和extensions
,都是須要接入 PVC 進行持久化存儲的。(就算只是測試,由於安裝插件須要重啓,所以也須要提供持久化支持)微信權限:該鏡像主進程是使用 999 的組 ID 運行的,所以須要進行配置。架構
後續內容所用插件目前還沒法支持 Sonarqube 7.7,所以此處使用的是 7.6 版本。app
總結以上幾點,列出代碼中須要注意的內容:maven
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: sonarqube
labels:
app: sonarqube
spec:
...
template:
metadata:
...
spec:
securityContext:
fsGroup: 999
containers:
- name: sonarqube
image: "sonarqube:7.6-community"
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 9000
volumeMounts:
- name: sonar-ext
mountPath: /opt/sonarqube/extensions
- name: sonar-data
mountPath: /opt/sonarqube/data
- name: sonar-log
mountPath: /opt/sonarqube/logs
- name: sonar-conf
mountPath: /opt/sonarqube/conf
...
配置 Sonarqube
Sonarqube 啓動以後,使用缺省用戶名和密碼(admin
/admin
)登陸以後,首先安裝 Java 語言插件:gitlab
在
/account/security/
修改密碼。前往
/admin/marketplace
安裝SonarJava
插件。打開路徑
/admin/system
,重啓服務。
接下來是手工安裝 Gitlab 插件:
使用
kubectl exec -it
進入 Sonarqube 的 Pod 中。進入
/opt/sonarqube/extensions/plugins
路徑,下載插件重啓 Sonarqube。
插件安裝完成以後,/projects/create
建立新項目,選擇 java
-> maven
,最終會出現以下提示:
其中包含了後續步驟所須要的 Token。
配置 Gitlab 插件
打開
admin/settings?category=gitlab
。填寫
GitLab url
以及GitLab User Token
。保存。
配置項目 CI
這部分至關簡單的一行 Maven 命令,例如
stages:
- test
- scan
...
Sonar:
stage: scan
tags:
- maven
script:
- mvn --batch-mode verify sonar:sonar -Dsonar.host.url=https://sonar.microservice.xyz -Dsonar.login=cd387c80d1d40b24c1000b9982778ecef572795c -Dsonar.projectKey=sam -Dsonar.gitlab.project_id=$CI_PROJECT_ID -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
這裏的關鍵參數:
sonar.host.url:Sonarqube 的地址。
sonar.login:Sonarqube 配置新項目時生成的 Token
sonar.projectKey:Sonarqube 新項目生成的 ID。
完成上述修改以後,就能夠提交你的 Java 代碼,看看 Sonarqube 在 Commit 下使用評論方式發表的代碼分析結果。
附錄
插件項目地址:https://github.com/gabrie-allaigre/sonar-gitlab-plugin/
本文分享自微信公衆號 - 僞架構師(fake-architect)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。