Как вы можете сделать версию SonarQube версии 5.2 неудачной сборки Jenkins?

Версия SonarQube = 5.2

Итак, я заметил, что мое приложение не получило качественных ворот в сонаре, но сборка по-прежнему зеленела.

Я googled, как заставить сонар вывести из строя сборку и получить результаты для плагина под названием "build breaker", который был обесценен для используемой версии (http://docs.sonarqube.org/display/PLUG/Build+Breaker+Plugin). Я не могу найти информацию о том, как добиться такого же нарушения целостности сборки в этой версии.

Я не видел каких-либо вариантов плагина Jenkins, которые достигают этой простой функциональности.

Любая помощь с этим будет принята с благодарностью!

Могу ли я также предложить, чтобы кто-то с репутацией более 1500 создавал новый тег для этой версии sonarqube (sonarqube5.2).

Ответ 1

В 5.2 нет встроенных или плагинов в функциональных возможностях, но это можно сделать с помощью веб-сервисов, но

  • Для этого вам нужно будет реализовать собственный плагин Jenkins (или сложный шаг сценариев).
  • В 5.2 последствия для безопасности непривлекательны. Они лучше в 5.3

Чтобы перевернуть свои собственные

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

[INFO] More about the report processing at http://your.sonarqube.server/api/ce/task?id=[guid]

Проверьте каталог "сонар", созданный во время анализа, для файла report-task.txt, чтобы получить это руководство; это значение ceTaskId.

В 5.2. Если у вас есть глобальные админы, вы можете щелкнуть по этой ссылке, чтобы получить текущий статус обработки отчета анализа. В 5.3 вам нужно только выполнить анализ perms. Отчет "done" выглядит следующим образом:

{ "задача": { "ID": "AVExRaJddM_jFJ3_Fp09", "тип": "Отчет", "ComponentID": "c81cfb77-7bb8-4ea6-ac84-dfee43b43b99", "componentKey": "org.apache. asyncweb: asyncweb-родитель" "ComponentName": "Apache Asyncweb Родитель" "componentQualifier": "ТРК", "статус": "УСПЕХ", "submittedAt": "2015-11-22T23: 17: 05 + 0100", "submitterLogin": "XXXX", "startedAt": "2015-11-22T23: 17: 07 + 0100", "executedAt": "2015-11-22T23: 17: 15 + 0100", "executionTimeMs": 7677, "журналы": истинно}}

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

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

Изменить для 6.2

6.2 добавляет webhooks. Вы можете настроить до 10 глобальных и до 10 URL-адресов уровня проекта, которые будут отправляться после завершения обработки отчета анализа. Тело сообщения представляет собой полезную нагрузку JSON, которая включает идентификаторы проекта и статус качества ворот.

Ответ 2

Быстрое обходное решение, добавьте шаг сообщения Выполнить оболочку script:

if [ "\`curl -sL -w %{http_code} http://sonar_host/api/qualitygates/project_status?projectKey=project_key -o /dev/null -S --quiet 2>&1 | jsawk -a 'return this.status'\`" == "ERROR" ]; 
then 
  exit 1; 
fi;

Ответ 3

Вы можете использовать плагин Quality Gates для Jenkins.

Он предоставит вам "Quality Gates" в качестве опции post-build. Затем вы должны просто заполнить свой проектный ключ от SonarQube. Помните, что это провалит вашу работу Дженкинса как в случае предупреждения, так и неудачи на ваших качественных воротах.

Ответ 4

Еще более быстрый обходной путь, только с собственными инструментами оболочки (jsawk должен быть установлен дополнительно)

#!/bin/bash                                                                                                                                                                                     
CURL='/usr/bin/curl'
RVMHTTP="http://sonar:9000/sonar/api/qualitygates/project_status?projectKey=PROJECTKEY"
CURLARGS="-u mysonaruser:mysonarpass"

# you can store the result in a variable
raw="$($CURL $CURLARGS $RVMHTTP)"

if [[ $raw = *"\"status\":\"ERROR\""* ]]; then
  exit 1
else
  exit 0
fi 

PROJECTKEY вы можете узнать с помощью curl -u mysonaruser:mysonarpass http://sonar:9000/sonar/api/projects/index"

Ответ 5

Я использую конвейер и проверяю сонар на отдельной стадии следующим образом:

import groovy.json.JsonSlurperClassic

pipeline {
....
stage('Check Sonar') {
            steps {
                withMaven(maven: 'maven-3.3.9') {
                    withSonarQubeEnv('SonarQube') {
                        sh 'mvn clean install sonar:sonar -Dsonar.scm.disabled=true -Dsonar.host.url=$SONAR_HOST_URL'
                    }
                }
                timeout(1) {
                    waitUntil {
                        script {
                            fileExists('target/sonar/report-task.txt')
                        }
                    }
                    waitUntil {
                        script {
                            def taskId = readFile('target/sonar/report-task.txt').split("\n")[3].split("=")[1]
                            def task_response = httpRequest "https://sonarUrl.com/api/ce/task?id=${taskId}"
                            def task_data = new JsonSlurperClassic().parseText(task_response.content)
                            return (task_data.task.status.equals("SUCCESS"))
                        }
                    }
                }
                script {
                    def response = httpRequest "https://sonarUrl.com/api/qualitygates/project_status?projectKey=XXX"
                    def data = new JsonSlurperClassic().parseText(response.content)
                    if (data.projectStatus.status == "ERROR") {
                        error("Sonar Quality Gate not met. Check https://sonarUrl.com/overview?id=XXX")
                    }
                }
            }
        }