在 《The Continuous Delivery Maturity Model》中,着重强调了 report 在 CI/CD 中的重要性,而且特别提到了要求做到做到历史 report 趋势的分析。gitlab-ci 由于本身设计的原因很难实现这些,我们必须借助三方软件的力量,例如 Sonar。
使用Docker镜像将整个过程拆分为 Golang 数据分析以及 SonarCube 上报两个阶段,且分别使用合适的 Docker Image:
stages:
- analysis
- sonar
Golang 如何接入 Sonar
官方给出的示例配置如下:
sonar.projectKey=com.company.projectkey1
sonar.projectName=My Project Name
sonar.sources=.
sonar.exclusions=**/*_test.go,**/vendor/**
sonar.tests=.
sonar.test.inclusions=**/*_test.go
sonar.test.exclusions=**/vendor/**
feature分支使用 Sonar 的 preview 功能:
sonar.analysis.mode=preview
最后:完整的.gitlab-ci.yml
stages:
- analysis
- sonar
analysis:
stage: analysis
image: golang:1.10.5-alpine
script:
- mkdir -p $GOPATH/src/$(dirname SampleProject)
- ln -svf $CI_PROJECT_DIR $GOPATH/src/SampleProject
- cd $GOPATH/src/SampleProject
- go test -v -test.short -coverprofile=coverage.out -timeout=10s $(go list ./... | grep -v /vendor/) -json > report.json
artifacts:
expire_in: 1 day
paths:
- report.json
- coverage.out
tags:
- k8s_public_centos7.2.1511
retry: 2
sonar-preview:
stage: sonar
image: newtmitch/sonar-scanner:3.2.0
script:
- cd $CI_PROJECT_DIR
- sonar-scanner -X
-Dsonar.host.url=<Your_SonarCube_URL>
-Dsonar.projectKey=<Your_Project_URL>
-Dsonar.projectName=<Your_Project_Name>
-Dsonar.sources=.
-Dsonar.analysis.mode=preview
-Dsonar.sources.inclusions=**/*.go
-Dsonar.exclusions=doc/**,**/*_test.go,**/vendor/**,.git/**,.glide/**
-Dsonar.tests=.
-Dsonar.test.inclusions=**/*_test.go
-Dsonar.test.exclusions=**/vendor/**
-Dsonar.go.tests.reportPaths=report.json
-Dsonar.go.coverage.reportPaths=coverage.out
dependencies:
- analysis
except:
- master
tags:
- k8s_public_centos7.2.1511
retry: 2
sonar:
stage: sonar
image: newtmitch/sonar-scanner:3.2.0
script:
- cd $CI_PROJECT_DIR
- sonar-scanner -X
-Dsonar.host.url=<Your_SonarCube_URL>
-Dsonar.projectKey=<Your_Project_URL>
-Dsonar.projectName=<Your_Project_Name>
-Dsonar.sources=.
-Dsonar.sources.inclusions=**/*.go
-Dsonar.exclusions=doc/**,**/*_test.go,**/vendor/**,.git/**,.glide/**
-Dsonar.tests=.
-Dsonar.test.inclusions=**/*_test.go
-Dsonar.test.exclusions=**/vendor/**
-Dsonar.go.tests.reportPaths=report.json
-Dsonar.go.coverage.reportPaths=coverage.out
dependencies:
- analysis
only:
- master
tags:
- k8s_public_centos7.2.1511
retry: 2