SonarQubeのバージョン= 5.2
そのため、アプリケーションがソナーの品質ゲートに失敗していることに気付きましたが、ビルドはまだグリーンになっています。
ソナーをビルドに失敗させる方法をグーグルで検索し、使用しているバージョンで減価償却された「ビルドブレーカー」と呼ばれるプラグインの結果を取得しました( http://docs.sonarqube.org/display/PLUG/ Build + Breaker + Plugin )。このバージョンで同じビルド破壊動作を実現する方法に関する情報が見つかりません。
このビルドを壊す機能を実現するJenkinsプラグインオプションは見当たりません。
これに関する助けをいただければ幸いです。
また、1500を超える評判のある人が、このバージョンのsonarqube(sonarqube5.2)の新しいタグを作成することを提案できますか。
5.2には、組み込みまたはプラグインを介してこれを可能にする直接機能はありませんが、Webサービスを介して実現できますが、
分析ログの最後を見てください。次のような行が含まれていることがわかります
[INFO] More about the report processing at http://your.sonarqube.server/api/ce/task?id=[guid]
分析中に作成された「sonar」ディレクトリでreport-task.txtファイルを確認して、そのGUIDを取得します。それはceTaskId値です。
5.2ではグローバル管理者権限がある場合そのリンクをクリックして、分析レポートの現在の処理ステータスを取得できます。 5.3では、必要なのは分析の実行パーマだけです。 「完了」レポートは次のようになります。
{"task":{"id": "AVExRaJddM_jFJ3_Fp09"、 "type": "REPORT"、 "componentId": "c81cfb77-7bb8-4ea6-ac84-dfee43b43b99"、 "componentKey": "org.Apache.asyncweb:asyncweb -parent "、" componentName ":" Apache Asyncweb Parent "、" componentQualifier ":" TRK "、" status ":" SUCCESS "、" submitAt ":" 2015-11-22T23:17:05 + 0100 "、" submitLogin ":" XXXX "、" startedAt ":" 2015-11-22T23:17:07 + 0100 "、" executeAt ":" 2015-11-22T23:17:15 + 0100 "、" executeTimeMs ":7677、"ログ":true}}
ステータスSUCCESSに到達したら、Webサービスを使用してプロジェクトの品質ゲートステータスを照会できます。
したがって、それは実行可能ですが、5.2では、グローバル管理者レベルのユーザーの資格情報を構成する場合に限ります。 5.3ではそれは良くなります。
6.2はwebhookを追加します。最大10個のグローバルおよび分析レポートの処理が完了した後にPOSTされる最大10個のプロジェクトレベルのURLを構成できます。投稿の本文は、プロジェクトIDと品質ゲートステータスを含むJSONペイロードです。
簡単な回避策として、ポストステップを追加しますシェルスクリプトの実行:
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;
Jenkinsの Quality Gates プラグインを使用できます。
ビルド後のオプションとして「QualityGates」を提供します。次に、SonarQubeからプロジェクトキーを入力するだけです。品質ゲートで警告または失敗した場合の両方で、Jenkinsジョブが失敗することを忘れないでください。
私はパイプラインを使用しており、次のように別の段階でソナーをチェックしています。
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")
}
}
}
}
ネイティブシェルツールのみを使用した、さらに迅速な回避策(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
curl -u mysonaruser:mysonarpass http://sonar:9000/sonar/api/projects/index"
で見つけることができるPROJECTKEY