Как вы можете сделать версию 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")
}
}
}
}