From 3dbfcab903e1a4f3735a30efafb78490039af4d3 Mon Sep 17 00:00:00 2001 From: sc979 <34628915+sc979@users.noreply.github.com> Date: Tue, 6 Jul 2021 10:14:28 +0200 Subject: [PATCH] enh(chore): integrate sonarQube dev edition (#2937) --- Jenkinsfile | 43 ++++++++++++++++++++++++++++++++++++---- sonar-project.properties | 14 +++++++++++-- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index b80a35c3b..ac28d7f97 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,3 +1,5 @@ +import groovy.json.JsonSlurper + properties([buildDiscarder(logRotator(numToKeepStr: '50'))]) stage('Source') { @@ -10,15 +12,48 @@ stage('Source') { source = readProperties file: 'source.properties' env.VERSION = "${source.VERSION}" env.RELEASE = "${source.RELEASE}" - if (env.BRANCH_NAME == 'master') { - withSonarQubeEnv('SonarQube') { - sh './centreon-build/jobs/plugins/plugins-analysis.sh' - } + // Run sonarQube analysis + withSonarQubeEnv('SonarQubeDev') { + sh './centreon-build/jobs/plugins/plugins-analysis.sh' } } } try { + stage('Quality gate') { + node { + def reportFilePath = "target/sonar/report-task.txt" + def reportTaskFileExists = fileExists "${reportFilePath}" + if (reportTaskFileExists) { + echo "Found report task file" + def taskProps = readProperties file: "${reportFilePath}" + echo "taskId[${taskProps['ceTaskId']}]" + timeout(time: 10, unit: 'MINUTES') { + while (true) { + sleep 10 + def taskStatusResult = + sh(returnStdout: true, script: "curl -s -X GET -u ${authString} \'${sonarProps['sonar.host.url']}/api/ce/task?id=${taskProps['ceTaskId']}\'") + echo "taskStatusResult[${taskStatusResult}]" + def taskStatus = new JsonSlurper().parseText(taskStatusResult).task.status + echo "taskStatus[${taskStatus}]" + // Status can be SUCCESS, ERROR, PENDING, or IN_PROGRESS. The last two indicate it's + // not done yet. + if (taskStatus != "IN_PROGRESS" && taskStatus != "PENDING") { + break; + } + def qualityGate = waitForQualityGate() + if (qualityGate.status != 'OK') { + currentBuild.result = 'FAIL' + } + } + } + } + if ((currentBuild.result ?: 'SUCCESS') != 'SUCCESS') { + error("Quality gate failure: ${qualityGate.status}."); + } + } + } + stage('Package') { parallel 'all': { node { diff --git a/sonar-project.properties b/sonar-project.properties index 922afdb35..755ab2309 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,3 +1,13 @@ -sonar.projectKey=centreon-plugins -sonar.projectName=Centreon Plugins +# project +sonar.projectKey={PROJECT_TITLE} +sonar.projectName={PROJECT_NAME} +sonar.projectVersion={PROJECT_VERSION} sonar.sources=. + +sonar.tsql.file.suffixes=sql,tsql +sonar.plsql.file.suffixes=pks,pkb + +# mandatory to not fail the builds until build-wrapper is installed and sources are compiled +sonar.c.file.suffixes=- +sonar.cpp.file.suffixes=- +sonar.objc.file.suffixes=-