.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: 这是我在掘金的第一篇水文,就是突然想写点东西~~~~~~