How to Integrate SonarQube Quality Gate in Jenkins Pipeline


áᎠLab áááŻáá ááşá¸áááşáážáŹ ...
SonarQube Server á Scanner áá˛áˇ Quality Gate áááŻáˇáá˛áˇ work flow áááŻáááááąá¸áááşááąáŹáˇ ááŽáážáŹáĄáááşááŻáśá¸áá˝áŹá¸ááźááˇáşáááŻááşááŤáááşá
SonarQube Scanner áá˛áˇ SonarQube Server Configuration áááşá¸áĄáááşááŻááşááŹá¸áááŻáˇáááŻááŤáááşá
ááŽáĄáááŻááşá¸áážáŹááąáŹáˇ SonarQube Server ááŽááąáŹááşááŹáá˛áˇ report áá˝áąáááąááááˇáş Quality Gate áážáŹ Condition áá˝áąáááşáážááşááźáŽá¸ Jenkins pipeline ááᯠáááşáá˝áŹá¸áááŹá¸ áááşáááŹá¸ áááŻáá˛áˇ integration áĄáááˇáşááᯠááŻááşááźáá˝áŹá¸áážáŹááŤá
áĽáááŹáĄáŹá¸ááźááˇáş Quality Gate Condition áážáŹ Bugs á á áᯠáááşáááŻááąáááş Pipeline ááᯠFailed ááŻááşáááş Abort ááŻááşáááŻááşáááŻáˇáááşáážááşááŹá¸áááŻááşáááşá áĄá˛áˇááŹááᯠReports áá˛áážáŹ Bugs 4 áᯠááŤáá˛áˇáĄáá áááşááśááąá¸áááş Pipeline continuous áááş run áááşááąáŤáˇá Bugs 4 ááŻáááşáááŻááźáŽá¸ Bugs 5 ááŻáá áááŻáˇ áĄááťáŹá¸ááźáŽá¸ááŤááŹááźáŽáááŻáááş Pipeline á Failed ááźá áşáá˝áŹá¸áááş Abort ááźá áşáá˝áŹá¸áááşááąáŤáˇá
ááąááťáŹáááşááźáąáŹááááşáááŻáááş Quality Gate ááááşáážááşááŹá¸áá˛áˇ Condition áááş ááááŻááąáá°á¸ Bugs 4 áᯠáĄáąáŹááşáááşá¸ááąáááşáááŻáááş SonarQube server áááą Jenkins ááŽááᯠáááŻáˇáá˛áˇ webhook JSON Payload áá˛áážáŹ Quality Gate Status ááᯠOK
áá˛áˇ áááŻáˇáááşááąáŤáˇá Bugs 4 áᯠáááşáááŻáá˝áŹá¸áááşááąáŹáˇ webhook JSON Payload áá˛á Quality Gate Status ááᯠERROR
áááŻááźáŽá¸ áááˇáşáááŻáˇáááŻááşááááˇáşáááşá áĄá˛áˇááąáŹáˇ áĄá˛áˇááŽááąáŹááşááŹáá˛áˇ webhook JSON Payload ááᯠJenkins pipeline áá˛áážáŹ Integrate ááŻááşááŹá¸áá˛áˇ Quality Gate Stage áááąá
áąáŹááˇáşááźááˇáşááźáŽá¸ OK
áááŻáááş Pass ááźá
áşááźáŽá¸áááşáá˝áŹá¸áááş ERROR
áááŻááŹáá˛áˇ FAILED ááźá
áşáááş Pipeline Abort ááźá
áşáá˝áŹá¸áááşááąáŤáˇá
ááŽááąáŹááşáááŻáááşááąáŹáˇ Quality Gate á Jenkins áá˛áˇáááşáááŻáá˝á˛áĄááŻááşááŻááşáááşá¸ áááşá¸áááşá¸ááąáŹáˇáážááşá¸áá˝áŹá¸áááşáááşááŤáááşá
ááŻááşááááş Step áá˝áąáááąáŹáˇ
áĄáááşááŻáśá¸ Webhook áá áşáᯠCreate ááŻááşáááŤáááşá
Webhook Create ááŻááşáááşá¸ áááşáážááşáááŻááşáá˛áˇ secret ááᯠJenkins áážáŹ Credential áá áşáᯠáĄááąáá˛áˇ Create ááŻááşáááŤáááşá Server Config áážáŹ Webhook secret ááźááşáá˝áąá¸ááąá¸áááŻáˇ áááŻááŤáááşá
ááźáŽá¸áááşááąáŹáˇ Pipeline áá˛áážáŹ Quality Gate Stage áá áşáᯠáááˇáşáááŻááşáááşáááŤááźáŽá
Webhook áá áşáᯠCreate ááŻááşáááŻáˇáĄáá˝ááş SonarQube Server Console ááŽáááŻáá˝áŹá¸áááŻááşááŤá
ááźáŽá¸áááşááąáŹáˇ Administration > Configuration > Webhooks áá˛ááááąáŹááşáá˛áˇáĄáááá˝áŹá¸áááŻááşááŤá
ááźáŽá¸áááşááąáŹáˇ ááŹáááşááąá¸ááŹá¸á Generate ááᯠáážáááşáááŻááşááŤá áĄá˛áˇááŽáážáŹ name áááąáŹáˇ áááŻááşááźááŻááşááŹááąá¸ááŤá URL áááąáŹáˇ Jenkins áážáŹ SonarQube Scanner Plugin install ááŻááşááŻááşá¸á ááźá
áşááąáŤáşááŹáá˛áˇ URL Address áááŻáááˇáşááąá¸ááážáŹááŤá default áĄáŹá¸ááźááˇáş JENKINS_URL/sonarqube-webhook/ or
http://172.31.85.252:8080/sonarqube-webhook/
áááŻááźáŽá¸ áááˇáşáááŻááşá፠ááąáŹááşááŻáśá¸á / slash
ááąá¸áááŻáááąáˇááŤáá˛áˇ á ááŽááąááŹáážáŹ Jenkins áá˛áˇ Private IP áááŻáá˛ááŻáśá¸áááŻááşááŤáááşá Secret áááąáŹáˇ áážá
áşáááşáᏠpassword áá
áşááŻááŻáááŻáááˇáşááźáŽá¸ áážááşááŹá¸ááŹáá˛áˇááŤá Jenkins áážáŹ Credentials áĄááąáá˛áˇ Create ááŻááşááážáŹááŤá
Webhook Create ááźáŽá¸áááşááąáŹáˇ Jenkins Console ááŽáááŻááźááşáá˝áŹá¸ááŤáááş Manage Jenkins > Credentials áá˛áááŻááąáŹááşááźáŽá¸áááŻáááş Global áá˛áááŻáááşáá˝áŹá¸ááźáŽá¸ Credential áá áşáᯠCreate ááŻááşáááŤáááşá áĄá˛áˇááŽáážáŹ Kind ááᯠSecret text áá˝áąá¸ááŤáááşá Secret ááąááŹáážáŹ áĄááŻá áááşáážááşáá˛áˇáá˛áˇ webhook secret áááŻáááˇáşáááŤáááş ááźáŽá¸áááşááąáŹáˇ áážá áşáááşáᏠid áá áşááŻáᯠáááşáážááşááźáŽá¸ Create áááŻááşáááşáááŤááźáŽá
webhook secret ááᯠJenkins credential áĄááąáá˛áˇáááźáŽáááŻáááşááąáŹáˇ Jenkins console áá˛á SonarQube Server Configuration ááŽáááŻááźááşáá˝áŹá¸áááŤáááşá Jenkins console > Manage Jenkins > Systems áĄáá˛áááŻááąáŹááşááźáŽáááŻáááş SonarQube servers
áááŻááŹááᯠáážáŹááŤá áá°áˇáĄáąáŹááşáážáŹ SonarQube Installation
áááŻáá˛áˇáĄáąáŹááşáážáŹ Advance
áááŻáá˛áˇ ááąááŹáážáááŤáááşááĄá˛áˇááŹáááŻáážáááşááźáŽá¸ Webhook Secret áááŻááąááŹáážáŹ Create ááŻááşáá˛áˇáá˛áˇ webhook hook secret credential ááᯠáá˝áąá¸ááážáŹááŤáááźáŽá¸áááş Save and Apply áááŻááşááŤáááŤááźáŽá
ááąáŹááşááŻáśá¸áĄáááˇáşáĄááąáá˛áˇ Pipeline áá˛áážáŹ Quality Gate Stage áá áşáᯠááᯠáááşáááˇáşááŤáááşá Jenkins áááŻááşáááŻáá˝ááˇáşáááŻááşááŤá ááźáŽá¸áááşááąáŹáˇ SonarQube Analysis stage áĄáąáŹááşáážáŹ ááŤááąá¸áááˇáşáááŻááşáááşáááŤááźáŽ áĄááąá¸á áááşáááŻááąáŹáˇ áᎠlink áááąáááşá¸ áá˝áŹá¸áááşááźááˇáşáááŻááşááŤáááşá https://www.jenkins.io/doc/pipeline/steps/sonar/
stage ('Quality Gate') {
steps {
waitForQualityGate abortPipeline: true
}
}
waitForQualityGate
:Wait for SonarQube analysis to be completed and return quality gate status
Full Jenkinsfile
pipeline {
agent any
stages {
stage('Checkout Source') {
steps {
checkout scm
}
}
stage('SonarQube Analysis') {
steps {
script{
def scannerHome = tool name: 'Sonar', type: 'hudson.plugins.sonar.SonarRunnerInstallation';
withSonarQubeEnv() {
sh "${scannerHome}/bin/sonar-scanner"
}
}
}
}
stage ('Quality Gate') {
steps {
waitForQualityGate abortPipeline: true
}
}
stage('Build') {
steps {
echo 'Building....'
echo 'Build completed.'
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
echo 'Deploy completed.'
}
}
}
}
Jenkins áááŻááşááᯠupdate ááŻááşááźáŽá¸áááşááąáŹáˇ Repo áᎠááźááş push ááŻááşááźáŽá¸ Pipeline Run áá˝áŹá¸ááŹáááŻááźááˇáşáááŻááşááŤá
Blue Ocean áážáŹ áááşá¸ááźááˇáşáááŻááşááŤáááşá Blue Ocean áááŻáááááąá¸áááşááŽáážáŹáá˝áŹá¸ááźááˇáşáááŻááşááŤáááşá
áᎠtesting áážáŹááąáŹáˇ ááŽáááŻáśá¸ááŹá¸áá˛áˇ Application Source Code áážáŹ Bugs áá˝áąáĄááťáŹá¸ááźáŽá¸áážáááąááŹááááŻáˇ Quality Gate status ERROR
ááźááźáŽá¸ Pipeline áááşá¸ failed áá˝áŹá¸ááŤáááşá
ááŤáááąáŹáˇ SonarQube Server áážáŹ áááşáážááşááŹá¸áá˛áˇ Quality Gate áá˛áˇ Default Conditions áá˝áąááźáąáŹááˇáşáá˛ááźá áşááŤáááşá SonarQube Server ááᯠáá˝áŹá¸ááźááˇáşááźááĄáąáŹááşááŤá áĄááŻááᯠáĄááťáŹá¸ááźáŽá¸áá˝áąáˇáááŤáááşá
ááŽáážáŹáááąáŹáˇ Sonar Way áááŻáá˛áˇ Build-in Quality Gate áá áşááŻáááŻáá˝áąáˇ ááážáŹá፠ááąá¸ááŹá¸á Create ááᯠáážáááşááźáŽá¸ áĄáá áşáá áşáᯠáááşááŽá¸áááŻááşááŤáááşá Name áá áşáᯠááąá¸ááźáŽá¸ Create áááŻááşááŤá
ááźáŽá¸áááşááąáŹáˇ áĄáąáŹááşá Default ááŤááŹáá˛áˇ Condition áá˝áąáááŻáá˝áąáˇáááŤááááˇáşáááşá
ááźááşááťááşáááşááąáŹáˇáĄáąáŹááşá Unlock editing áááŻáážáááşááźáŽ ááźááşááŹááźá áşááźá áş áĄáá áş áááşáááˇáşááťááşááŹááźá áşááźá áş ááŻááşáááŻáˇáááŤáááşá
Unlock editing ááŻááşááźáŽá¸áá˛áˇáĄá፠ááŽáááŻááşá¸áá˝áąáˇááážáŹááŤá ááŽá áááąáŹáˇ Condition áá áşáᯠáĄáá áş ááŻááşááźááźáŽá¸ Effect ááźá áşáááźá áş á ááşá¸ááźááˇáşááťááşááŹááááŻáˇ áĄááŻááş ááťááşááťáááŻááşááŤáááş ááąá¸ááŹá¸áážáŹ Delete icon ááąá¸ááŤááŤáááşá
ááŽáážáŹ Measures áážáŹáááŻáááş Critical issues 863 áᯠáážáááŤáááşááĄá˛áˇááŹááᯠConditions á á áşááŤáááşá
áĄáá áş CreateááŻááşááŹá¸áá˛áˇ Quality Gate ááᯠááźááşáá˝áŹá¸áááŻááşá፠Add Conditions áááŻáážáááşááźáŽá¸áĄáá áşáááˇáşáááŻáˇáááŤáááşá
Critical issues ááᯠá á áşáážáŹ ááááŻáˇ áážáŹ ááźáŽá¸ Add áááŻááşááŤáááşá
áĄááŻá áá˝áŹá¸ááźááˇáşáá˛áˇáᏠCritical issues 863 áážáááŹááááŻáˇ 864 ááŹá¸ááźááˇáşáááŻááşááŤáááşá ááąá¸ááŹá¸á Operator á is greater than
ááŤá áááŻáááŻááŹá Critical issues 864 áááşáááŻáááş webhook áááą ERROR
áááŻáááŻáˇáááş Pipeline á Failed ááźá
áşáá˝áŹá¸áááş Abort ááźá
áşáá˝áŹá¸áááşááąáŤáˇá áĄáááşá 864 áááşáááşá¸ááąáááşááąáŹáˇ OK
áááŻáˇáááş Pipeline ááááşáá˝áŹá¸áááşááąáŤáˇá ááŽááąááŹáážáŹááąáŹáˇ 864 áááşáááşá¸ááźáŽá¸ááŹá¸áááŻáˇ pipeline á ááąááťáŹááąáŤááş Pass ááźá
áşááźáŽá¸áááşáá˝áŹá¸ááŤáááşá
Condition ááᯠá áááşááźááŻááşáááşáážááşááźáŽá¸áá˝áŹá¸ááźáŽáááŻáááşááąáŹáˇ áĄáá áş Create ááŻááşááŹá¸áá˛áˇ Quality Gate ááᯠProject áá˛áˇ áá˝á˛ááąá¸áááŻáˇáááŻááŤááąá¸áááşá áĄáąáŹááşá project áážáŹ all ááᯠáážáááş Project name ááᯠáážáŹááźáŽá¸ select ááŻááşáááŻááşááŻáśááŤáá˛á
áĄá˛áˇááᯠáááŻááşáᲠProject áá˛áááŻáá˝áŹá¸ááźáŽá¸ Project Settings > Quality Gate áážáŹ áááŻááşáááşáážááşááťááşáá˛áˇ Quality Gate ááᯠáá˝áąá¸ááąá¸áááŻááşáááşáááşá¸áááŤáááşá ááŤáááąáŹáˇ Quality Gate ááᯠProject áážáŹ áá˝á˛áááŻááşááŹááŤáá˛á
Project áá˛áˇ Quality Gate áá˝á˛ááźáŽá¸ááźáŽáááŻááŹáá˛áˇ á
ááşá¸ááźááˇáşáááŻáˇ Pipeline ááᯠááźááş run áááŻááşááŤá ááźáŽá¸ áááş Pipeline Console output or blue ocean áážáŹáá˝áŹá¸ááźááˇáşáááŻááşááŤáááşá Quality Gate OK
ááźáŽá¸ Pipeline áááş run áá˝áŹá¸ááŹáááŻáá˝áąáˇáááŤááááˇáşáááşá
áĄáᯠáĄá፠Condition ááᯠ860 áááŻááźáŽá¸ áááşá¸ááŹá¸áááŻááşááŤááźáŽá ááááş Critical issue áááşááąááŹá 863 ááŻá፠Condition áááşááťáŹá¸ááąááŤáááşá ááŹááźá áşááá˛ááááťááşááŹááááŻáˇ Pipeline ááᯠááźááş Run ááźááˇáşááŤáááşá
ááŽáá
áşááąáŤááşáážáŹááąáŹáˇ Quality Gate Status á ERROR
áááŻáˇ ááźááźáŽá¸ Pipeline á Failed áá˝áŹá¸áá˛áˇááŤááźáŽá Critical issues á áááşáážááşááŹá¸áá˛áˇ Quality Gate Condition 860 áááşááťáŹá¸ááąáááŻáˇááŤá
áĄá˛áˇááąáŹáˇáĄááąáŤáşáážáŹááźáąáŹáá˛áˇáá˛áˇ Jenkins ááŽááᯠááźááşáááŻáˇáááŻááşáááşáááŻáá˛áˇ webhook JSON Payload áááŻáááşá¸ áá˝áŹá¸ááźááˇáşáááŻááşááŤáááşá ááŤá Quality Gate Status ERROR
ááźááŹááŤá
ááŤá Quality Gate Status OK
ááźááŹááŤá
áĄá˛áˇááŹáá˝áąáááŻáááşáážáŹáá˝áŹá¸ááźááˇáşáááŻáˇááá˛áááŻááąáŹáˇ SonarQube Server > Administration > Configuration > Webhook áá˛áážáŹ ááźááşáá˝áŹá¸ááźááˇáşáááŻááşááŤáááşá
ááŤáááŻáááşááąáŹáˇ Quality Gate áá˛áˇ Lab ááąá¸á ááşá¸ááźááˇáşáááşáááŻáááşááąáŹáˇáĄáááşááźáąááąáŹááşáááşáááŻáˇááťáąáŹáşáááˇáşááŤáááşá SonarQube áá˛áˇ work flow áááŻááąáŹáˇ áááááąá¸áááş áĄáááşáá˝áąáˇáááŻááşááŤáááşá áĄáááşáá˛áážááááşááŽáážáŹ áááşááźááˇáşááźáŽá¸ááźááşá ááşá¸áááŻááşááŤáááşá ááťáąá¸áá°á¸áááşááŤáááşá
Subscribe to my newsletter
Read articles from Kadaie Kyiphyu directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
