转载

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
正文到此结束
Loading...