.gtitlab-ci.yml
image: maven:3.6.3-jdk-8
before_script:
- mvn clean
test:
script:
- mvn verify sonar:sonar
复制代码
简单粗暴,等流水线跑完,就能够在 Sonar 服务中看代码扫描结果(假定 Pom 中已配置好 Soanr 的相关参数)
我以为的需求 ↑ ------------------- 实际的需求 ↓
为方便在 Sonar 之前执行额外的 Stage
test-job 完成然后执行 sonar-job,sonar-job会把 test-job 的执行结果推送到 Sonar
.gtitlab-ci.yml
··· ignore ···
test-job:
stage: test
before_script:
- mvn clean
script:
- mvn verify
sonar-job:
stage: sonar
script:
- mvn sonar:sonar
复制代码
But... 跑了好多次流水线都是 Failed(瞧,一天就过去了),特别是一开时没有将 Sonar 相关的 Maven 依赖挂载出来,跑一次流水线需要 20 分钟,调试效率可想而知(虽然 Runner 配置了 Maven 依赖的挂载,因为 Sonar 还有自己的缓存数据需要挂载,就是下面的路径(暂且这么认为),挂载后直接将达几十秒,跑流水线一定要把 Maven 依赖挂载出来,不然每次 PR 真的欲仙欲死)
/root/.sonar/cahce
为啥会执行 Remove 操作!!!!,这操作把 sonar-job 需要的数据给理清了
找了很久的原因,看着 gitlab-ci 的官方文档,尝试了 artifact 、cache,想将 test-job 生成的 target 传递给 soanr-job
artifact 方式没成功,cache 成功了,but...肯定不行
最后发现 remove 操作之前是 git checkout, 这一步操作会将本地的改动还原掉,也就是把 test-job 构建好的内容清理掉.......(心情复杂.jpg & 我怎么这么辣鸡.jpg)
因此阻止 sonar-job 进行 checkout 操作就行
再次打开了 gitlab-ci 的 配置说明文档 ,浏览器 Ctrl+F ,输入:checkout(太懒了,从头看到尾太难了)
Got you, variables 中有两个 GIT STRATEGY , GIT_CHECKOUT 属性
GIT STRATEGY 设置为 none
GIT_CHECKOUT 设置为 "false"(没错,就是字符串,还得带引号)
以上两种方式都可,要注意的是得配置在某个不希望进行检出操作的 Job 中,而不是全局的
.gtitlab-ci.yml
image: maven:3.6.3-jdk-8
stages:
- test
- sonar
test-job:
stage: test
before_script:
- mvn clean
script:
- mvn verify
sonar-job:
stage: sonar
script:
- mvn sonar:sonar
variables:
GIT_CHECKOUT: "false"
复制代码
pom.xml
··· ignore ···
<profile>
<id>sonar</id>
<properties>
<sonar.host.url>http://127.0.0.1:9000</sonar.host.url>
<sonar.login>soanr access token</sonar.login>
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.coverage.jacoco.xmlReportPaths>${project.build.directory}/jacoco-ut/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
<sonar.language>java</sonar.language>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>
</plugins>
</build>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
··· ignore ···
复制代码
PS: 这是我在掘金的第一篇水文,就是突然想写点东西~~~~~~