本文介绍了将Quality Gate添加到Jenkins Maven项目的构建部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Jenkins Maven项目,它为我的构建运行SonarQube分析。我想添加质量门,这样当质量门失败时我的构建就会失败。我也希望不使用Jenkinsfile(所以只使用Jenkins项目配置)。目前,我使用Build部分来执行SonarQube分析。‘Goals and Options’字段的代码如下:

clean package -Dmaven.test.skip=true sonar:sonar -Dsonar.projectKey=someName -Dsonar.sources=src/main/java

这里是我希望定义和实施质量门的地方:

我试图将Quality Gate添加到‘Post Build’部分,但没有可用的选项对我起作用(我本来想尝试让‘SonarQube Analysis with Maven’选项起作用,但现在它已被弃用)。我还发现‘Quality Gate’插件对Jenkins是可用的,但它有一个我不想要的漏洞(但我想知道是否有其他插件可以替代)。

我认为‘Pre-Steps’部分中的‘Execute SonarQube Scanner’选项可以做到这一点,但我找不到需要添加到Sonar-project t.Properties文件中的正确行(是否有类似sonar.qualityGateFailBuild = true选项的行?)

This这里的问题提到Maven版本是个问题。不知道是否有可能解决这个问题?(我的maven版本是3.8.0,无法更改)

更新

找到允许配置sonar.Property文件的"Post Step"部分。目前,它看起来如下,但质量门仍然没有失败的我的构建。我还需要添加哪些其他参数?:

推荐答案

经过反复试验,我发现thisPOST是救命稻草。当我尝试使用Nanotron的代码(上一个答案)时,我遇到了一些错误,所以我添加了一些调整。以下是对我有效的方法(我使用了Jenkins项目的‘Post Steps’-->;‘Execute Shell Command’部分):

if [ -e tmp.txt ];
then
rm tmp.txt
rm error.txt
rm task.json
fi


url=$(cat $WORKSPACE/[your pathway here]/target/sonar/report-task.txt | grep ceTaskUrl | cut -c11- )
echo ${url}
pswd=${SONAR_AUTH_TOKEN} // env variable that fetches sonar token
curl -s -X GET -u "${pswd}" "$url" | python -m json.tool

stsCheck=1

while [ $stsCheck = 1 ]
do
sleep 10
curl -s -X GET -u "${pswd}" "$url" -o task.json
status=$(python -m json.tool < task.json | grep -i "status" | cut --delimiter=: --fields=2 | sed 's/"//g' | sed 's/,//g' )
echo ${status}

if [ $status = SUCCESS ]; then
analysisID=$(python -m json.tool < task.json | grep -i "analysisId" | cut -c24- | sed 's/"//g' | sed 's/,//g')
analysisUrl="http://my-sonar-server/api/qualitygates/project_status?analysisId=${analysisID}"
echo ${analysisID}
echo ${analysisUrl}

stsCheck=0
fi
done

curl -s -X GET -u "${pswd}" -L $analysisUrl | python -m json.tool
curl -s -X GET -u "${pswd}" -L $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
echo "Quality Gate Failed ! Setting up SonarQube Job Status to Failure ! "
exit 1
fi

这篇关于将Quality Gate添加到Jenkins Maven项目的构建部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 23:08