You can do that with the Shell commands: sharing this info if someone needs it
To mark build as failure when Quality gate is not passed using Sonar Rest api. Add “Execute Shell” after Sonar Step and use below code
Tip : Introduce sleep time of 10s before this step , just to ensure that Sonar site is updated with task result status.
Fetching TASKURL from report-task.txt in workspace
url=$(cat $WORKSPACE/.sonar/report-task.txt | grep ceTaskUrl | cut -c11- )
Fetching Task attributes from Sonar Server
curl -u admin:${admin_pwd} -L $url | python -m json.tool
Setting up task status to check if sonar scan is completed successfully.
curl -u admin:${admin_pwd} -L $url -o task.json
status=$(python -m json.tool < task.json | grep -i "status" | cut -c20- | sed 's/.(.)$/\1/'| sed 's/.$//' )
echo ${status}
If SonarScan is completed successfully then set analysis ID & URLS.
if [ $status = SUCCESS ]; then
analysisID=$(python -m json.tool < task.json | grep -i "analysisId" | cut -c24- | sed 's/.(.)$/\1/'| sed 's/.$//')
analysisUrl="https://sonar.net/api/qualitygates/project_status?analysisId=${analysisID}
echo ${analysisID}
echo ${analysisUrl}
else
echo "Sonnar run was not sucess"
exit 1
fi
Fetching SonarGate details using analysis URL
curl -u admin:$admin_pwd ${analysisUrl} | python -m json.tool
curl -u admin:$admin_pwd ${analysisUrl} | python -m json.tool | grep -i "status" | cut -c28- | sed 's/.$//' >> tmp.txt
cat tmp.txt
sed -n '/ERROR/p' tmp.txt >> error.txt
cat error.txt
if [ $(cat error.txt | wc -l) -eq 0 ]; then
echo "Quality Gate Passed ! Setting up SonarQube Job Status to Success ! "
else
exit 1
echo "Quality Gate Failed ! Setting up SonarQube Job Status to Failure ! "
fi
Cleaning up the files
unset url
unset status
unset analysisID
unset analysisUrl
task.json
tmp.txt
error.txt