Преобразовать шаг сборки Jenkins для SonarQube в трубопровод? - PullRequest
0 голосов
/ 28 февраля 2019

В процессе освоения конвейеров Jenkins я конвертирую некоторые старые сборки, использующие проекты типа FreeStyle, в конвейеры.Старая сборка Freestyle работает хорошо.

Мои сборки обычно выполняются в контейнерной среде (ускоряется только для этой сборки по SSH) и заканчиваются анализом SonarQube для QA.

Sonarqubestep (с использованием плагина Jenkins SonarQube) автоматически внедряет сканер sonarqube с правильными аргументами в контейнер для подключения к серверу SonarQube, как показано в этом примере из консольных журналов сборки Jenkins:

22:47:13 Unpacking https://repo1.maven.org/maven2/org/sonarsourc/scanner/cli/sonar-scanner-cli/3.3.0.1492/sonar-scanner-cli-3.3.0.1492.zip to /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube on docker-000b7eccw94td on Docker on master
22:47:13 [g7ctrl-server] $ /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube/bin/sonar-scanner -Dsonar.host.url=https://myserver.com/sonarqube ******** -Dproject.settings=/home/jenkins/workspace/g7ctrl-server/sonar-project.properties -Dsonar.projectBaseDir=/home/jenkins/workspace/g7ctrl-server
22:47:14 INFO: Scanner configuration file: /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube/conf/sonar-scanner.properties
22:47:14 INFO: Project root configuration file: /home/jenkins/workspace/g7ctrl-server/sonar-project.properties
22:47:14 INFO: SonarQube Scanner 3.3.0.1492

Прочитав Анализ в конвейере Дженкинса Я пришел к выводу, что он не применяется, поскольку сканер не установлен.Также читаем Выполнить SonarQube Scanner в Jenkins 2 Pipeline , поскольку он предполагает то же самое.

Есть ли какая-либо автоматизация (эквивалентная этапу сборки FreeStyle) или мне нужно написать shell-скрипт для загрузки,распаковать и установить сканер вручную в контейнер?

Был бы признателен, если бы кто-то мог пролить свет на это?(или несколько примеров лучших практик - поскольку я новичок в конвейерном скриптинге), я бы предположил, что другие тоже сталкивались с этой проблемой)

Обновление: (почти решено)

Используя генератор фрагментов, можно настроить стандартные инструменты

stage('SonarQube analysis') {
  def sonarqubeScannerHome = tool name: 'Aditus SonarQube', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
  withSonarQubeEnv('Aditus SonarQube') {
    sh "${sonarqubeScannerHome}/bin/sonar-scanner -Dsonar.host.url=https://myserver.com/sonarqube -Dproject.settings=/home/jenkins/workspace/g7ctrl-server/sonar-project.properties -Dsonar.projectBaseDir=/home/jenkins/workspace/g7ctrl-server"
  }
}

Определение инструмента заставит Jenkins загрузить, распаковать и установить Scanner Tool.Однако, несмотря на то, что параметры настройки проекта такие же, как и в сборке freestyle (это работает), сканер считает, что корневой файл не установлен, как видно из журналов

Unpacking https://repo1.maven.org/maven2/org/sonarsource/scanner/cli/sonar-scanner-cli/3.3.0.1492/sonar-scanner-cli-3.3.0.1492.zip to /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube on docker-000dsh7hwihbw on Docker on master
[Pipeline] sh
+ /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube/bin/sonar-scanner -Dsonar.host.url=https://myserver.com/sonarqube -Dproject.settings=/home/jenkins/workspace/g7ctrl-server/sonar-project.properties -Dsonar.projectBaseDir=/home/jenkins/workspace/g7ctrl-server
INFO: Scanner configuration file: /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE

Скорее всего, есть путьпроблема в моем отсутствии мастерства конвейерных скриптов, которые я не вижу.(Сканер вызывается с одинаковыми параметрами как для фристайла, так и для конвейера)

1 Ответ

0 голосов
/ 01 марта 2019

решено

Поскольку путь к рабочей области зависит от имени проекта jenkins, путь был неверным.Когда я настраивал параметры сканера, я просто копировал из моего (рабочего) проекта вольным стилем имя исходного проекта Jenkins в пути, а не имя нового проекта конвейера.

Полный этап конвейера для загрузки, установки иследовательно, запуск сканера можно просто записать как:

stage('SonarQube analysis') {
    def sonarqubeScannerHome = tool name: '<SONARQUBE-TOOL-NAME>'
    sh "${sonarqubeScannerHome}/bin/sonar-scanner"
}

, где SONARQUBE-TOOL-NAME должно быть тем же именем , которое вы дали инструменту сонарав глобальной конфигурации инструмента в Jenkins (конфигурация инструмента также определяет, какую версию и как получить инструмент)

Если вы работаете за обратным прокси-сервером, у вас может возникнуть проблема с поиском сервера SonarQube (особенно если вы работаете вконтейнер), если он имеет только локальное имя Bonjour, и в этом случае вам необходимо добавить адрес сервера в качестве параметра, а также, если необходимо добавить имя (или путь) не по умолчанию для свойств проекта.Таким образом, с параметрами сценарий имеет вид

stage('SonarQube analysis') {
    def sonarqubeScannerHome = tool name: '<SONARQUBE-TOOL-NAME>'
    sh "${sonarqubeScannerHome}/bin/sonar-scanner -Dsonar.host.url=https://<SONAR-QUBE-SERVER> -Dproject.settings='sonar-project.properties' -Dsonar.projectBaseDir=."
}

Примечание: В зависимости от конфигурации должен быть настроен путь к файлу project.settings.

КредитСпасибо Хакамайри, который заставил меня пересмотреть мои предположения о пути.

...