Рубрики
Uncategorized

Sonarqube и Gitlab setup

Sonarqube — отличный инструмент для качества кода и проверки безопасности. Это один из инструментов, которые мы используем для Ensu … Помечено Гитлабом, Сонаркубе, Докером, DevOps.

Sonarqube является отличным инструментом для качества кода и проверки безопасности. Это один из инструментов, которые мы используем для обеспечения измерения и улучшения качества наших продуктов с течением времени.

Мы также используем Gitlab — Управление кодом и инструмент CI/CD в некоторых наших проектах. Анализ кода Sonarqube интегрирован как шаг в наши конвейеры Gitlab CI.

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

Несмотря на то, что этот изображение Docker на заказ довольно автоматизировало, добавляло к обслуживанию трубопроводов. Я был рад видеть, что Sonarsource недавно опубликовал Официальное изображение SonarsCanner Cli Docker и Объявлена поддержка интеграции Gitlab в V8

Sonarsource/Sonar-Scanner-Cli-Docker

Docker Image для SonarsCanner CLI

Изображение Docker ожидает, что код будет установлен на $ Pwd , который установлен на /usr/src . Это отличается от того, где Gitlab устанавливает каталог источников по умолчанию.

Чтобы все это работало, должна быть установлена следующая переменная среды:

sonar:
  image: sonarsource/sonar-scanner-cli
  script:
    - sonar-scanner -Dsonar.qualitygate.wait=true
  allow_failure: true
  variables:
    SONAR_PROJECT_BASE_DIR: "${CI_PROJECT_DIR}"

Переменная среды Sonar_project_base_dir переопределяет поведение по умолчанию Анкет Предопределенная переменная среды Gitlab Ci_project_dir Относится к месту, где Gitlab устанавливает исходный код проекта.

Без этой переменной установите следующая ошибка вводящего в заблуждение в журнале Gitlab:

ERROR: Error during SonarScanner execution
java.lang.IllegalStateException: Unable to create user cache: /usr/src/.sonar/cache
    at org.sonarsource.scanner.api.internal.cache.FileCache.createDir(FileCache.java:147)
    at org.sonarsource.scanner.api.internal.cache.FileCache.(FileCache.java:46)
    at org.sonarsource.scanner.api.internal.cache.FileCache.create(FileCache.java:52)
    at org.sonarsource.scanner.api.internal.cache.FileCacheBuilder.build(FileCacheBuilder.java:48)
    at org.sonarsource.scanner.api.internal.JarDownloaderFactory.create(JarDownloaderFactory.java:42)
    at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.createLauncher(IsolatedLauncherFactory.java:68)
    at org.sonarsource.scanner.api.EmbeddedScanner.doStart(EmbeddedScanner.java:185)
    at org.sonarsource.scanner.api.EmbeddedScanner.start(EmbeddedScanner.java:123)
    at org.sonarsource.scanner.cli.Main.execute(Main.java:73)
    at org.sonarsource.scanner.cli.Main.main(Main.java:61)
Caused by: java.nio.file.AccessDeniedException: /usr/src/.sonar
    at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
    at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(Unknown Source)
    at java.base/java.nio.file.Files.createDirectory(Unknown Source)
    at java.base/java.nio.file.Files.createAndCheckIsDirectory(Unknown Source)
    at java.base/java.nio.file.Files.createDirectories(Unknown Source)
    at org.sonarsource.scanner.api.internal.cache.FileCache.createDir(FileCache.java:145)
    ... 9 more
ERROR: 
ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.

Улучшения

Было бы неплохой идеей кэшировать каталоги сканера сонара, которые будут повторно использованы в будущих пробегах трубопровода:

sonar:
  image: sonarsource/sonar-scanner-cli
  script:
    - sonar-scanner -Dsonar.qualitygate.wait=true
  allow_failure: true
  variables:
    SONAR_PROJECT_BASE_DIR: "${CI_PROJECT_DIR}"
  cache:
    key: "sonar-${CI_PROJECT_ID}"
    paths:
      - ".scannerwork"
      - ".sonar"

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

sonar:
  image: sonarsource/sonar-scanner-cli
  needs: []
  dependencies: []
  script:
    - sonar-scanner -Dsonar.qualitygate.wait=true
  allow_failure: true
  variables:
    SONAR_PROJECT_BASE_DIR: "${CI_PROJECT_DIR}"
    GIT_DEPTH: 0
  cache:
    key: "sonar-${CI_PROJECT_ID}"
    paths:
      - ".scannerwork"
      - ".sonar"

Наконец, я использовал Git_depth переменная среды для обеспечения соблюдения Мелкий клон нашего довольно большого репозитория.

Оригинал: «https://dev.to/mungell/setup-sonarqube-with-gitlab-542b»