Gitlab-CI与Sonar的故(pei)事(zhi)

.gtitlab-ci.yml
image: maven:3.6.3-jdk-8

before_script:
  - mvn clean

test:
  script:
    - mvn verify sonar:sonar
复制代码

简单粗暴,等流水线跑完,就能够在 Sonar 服务中看代码扫描结果(假定 Pom 中已配置好 Soanr 的相关参数

我以为的需求 ↑ ——————- 实际的需求 ↓

Last 按步执行

为方便在 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
Gitlab-CI与Sonar的故(pei)事(zhi)
Gitlab-CI与Sonar的故(pei)事(zhi)

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

Gitlab-CI与Sonar的故(pei)事(zhi)

原文 

https://juejin.im/post/5e89f87d6fb9a03c917fcc3a

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Gitlab-CI与Sonar的故(pei)事(zhi)

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址