задний план
Автоматически сообщать результаты выполнения 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, просто захотелось что-нибудь написать~~~~~~