Практические заметки (1) История Gitlab-Ci и Sonar (Pei) (ЧЖИ)

CI/CD

задний план

Автоматически сообщать результаты выполнения Jacoco в Sonar через Gitlab-CI

И Gitlab Runner, и Sonarqube работают на Docker.

Первый за один шаг

.gtitlab-ci.yml

image: maven:3.6.3-jdk-8

before_script:
  - mvn clean

test:
  script:
    - mvn verify sonar:sonar

Просто и грубо, вы можете увидеть результаты сканирования кода в сервисе Sonar после завершения конвейера (при условии, что соответствующие параметры Soanr были настроены в Pom)

Я думал спрос ↑ ------------------- Реальный спрос ↓

Последний шаг за шагом

Для облегчения реализации дополнительной стадии перед Sonar

Тестовое задание завершено, затем выполняется сонарное задание, и сонарное задание передаст результат выполнения тестового задания в Сонар.

.gtitlab-ci.yml

··· ignore ···

test-job:
  stage: test
  before_script:
    - mvn clean
  script:
    - mvn verify

sonar-job:
  stage: sonar
  script:
    - mvn sonar:sonar

Но... После многократного запуска конвейера он был Failed (посмотрите, один день прошел), тем более, что зависимости Maven, связанные с Sonar, не были смонтированы в начале, один раз запустить конвейер заняло 20 минут, а эффективность отладки можно представить (хотя Runner настроен на монтирование, зависящее от Maven, поскольку Sonar по-прежнему имеет свои собственные кэшированные данные для монтирования, что является следующим путем (пока так думаю), это займет десятки секунд после монтирования, и зависимость Maven должна быть смонтирована при запуске конвейера Load it out, иначе каждый PR очень хочет умереть)

/root/.sonar/cahce

Почему выполняется операция Удалить! ! ! !, эта операция уточняет данные, необходимые для работы сонара.

Долго искал причину, посмотрел официальную документацию gitlab-ci, попробовал артефакт и кеш, и захотел передать сгенерированный test-job таргет в soanr-job

Метод артефакта был неудачным, кэш был успешным, но ... определенно не

Наконец, он был найден до git checkout. Этот шаг будет преобразован в локальное изменение. .jpg)

Так что достаточно запретить sonar-job выполнять операцию проверки

Снова открыл gitlab-ciдокументация по конфигурации, браузер Ctrl+F , ввод: оформить заказ (слишком ленив, слишком сложно читать от начала до конца)

Понял, в переменных двеGIT STRATEGY,GIT_CHECKOUTАтрибуты

  • GIT STRATEGY не установлен

  • GIT_CHECKOUT имеет значение «false» (да, это строка с кавычками)

Вышеупомянутые два метода могут быть использованы.Следует отметить, что это должно быть настроено в задании, которое не хочет выполнять операцию проверки, а не глобально.

Справочник по конфигурации

.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: Это моя первая гидрология в Nuggets, просто захотелось что-нибудь написать~~~~~~