为Jenkins maven项目增加质量门';s构建部分

为Jenkins maven项目增加质量门';s构建部分,jenkins,sonarqube,maven-plugin,Jenkins,Sonarqube,Maven Plugin,我有一个Jenkins Maven项目,为我的构建运行SonarQube分析。我想添加质量门,这样当质量门失败时,我的构建就会失败。我也希望不使用Jenkins文件(所以只使用Jenkins项目配置)。目前,我使用构建部分来执行SonarQube分析。“目标和选项”字段包含以下代码: clean package -Dmaven.test.skip=true sonar:sonar -Dsonar.projectKey=someName -Dsonar.sources=src/main/java

我有一个Jenkins Maven项目,为我的构建运行SonarQube分析。我想添加质量门,这样当质量门失败时,我的构建就会失败。我也希望不使用Jenkins文件(所以只使用Jenkins项目配置)。目前,我使用构建部分来执行SonarQube分析。“目标和选项”字段包含以下代码:

clean package -Dmaven.test.skip=true sonar:sonar -Dsonar.projectKey=someName -Dsonar.sources=src/main/java
以下是我希望定义和实施质量门的地方:

我试图将质量门添加到“后期构建”部分,但没有可用的选项对我有效(我曾想尝试使“SonarQube Analysis with Maven”选项起作用,但现在不推荐使用)。我还发现Jenkins可以使用“Quality Gate”插件,但它有一个我不想拥有的漏洞(但不知道是否有任何替代插件)

我认为“预步骤”部分中的“执行SonarQube Scanner”选项可以执行,但我找不到需要添加到sonar-project.properties文件中的正确行(是否有类似于
sonar.qualityGateFailBuild=true
选项的行?)

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

更新

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


以下是实现这一目标的最可靠方法

您可以使用自定义脚本实现这一点,以使用sonar web api获取QualityGate状态,并将作业设置为failed和success

使用
maven sonar:sonar
运行声纳分析时,分析完成后,将在工作区文件夹中创建报告任务。txt

注意:文件report-task.txt的位置取决于用于生成它的工具(在您的例子中是gradle)。例如,“mvn声纳:声纳”任务默认为“目标/声纳”。此位置由“sonar.scanner.metadataFilePath”属性控制

您将在报告任务.txt中获得
ceTaskUrl
cetaskuid
。现在,您可以使用该ceTaskUrl获取分析ID

您可以使用下面的web api使用analysisId获取质量关卡状态


http://localhost:9000/sonarqube/api/qualitygates/project_status?analysisId=$ANALYSIS\u ID

经过反复试验,我找到了一个可以挽救生命的帖子。我在尝试使用Nanotron的代码(最后一个答案)时出现了一些错误,因此我添加了一些调整。以下是对我有效的方法(我在Jenkins项目中使用了“Post步骤”-->“执行shell命令”部分):

if[-e tmp.txt];
然后
rm tmp.txt
rm error.txt
rm task.json
fi
url=$(cat$WORKSPACE/[此处的路径]/target/sonar/report-task.txt | grep ceTaskUrl | cut-c11-)
echo${url}
pswd=${SONAR\U AUTH\U TOKEN}//env变量,用于获取SONAR令牌
curl-s-xget-u“${pswd}”“$url”| python-mjson.tool
stsCheck=1
而[$stsCheck=1]
做
睡眠10
curl-s-X GET-u“${pswd}”“$url”-o task.json
status=$(python-mjson.tool>tmp.txt
cat tmp.txt
sed-n'/ERROR/p'tmp.txt>>ERROR.txt
cat error.txt
如果[$(cat error.txt | wc-l)-eq 0];然后
echo“质量门通过!设置SonarQube工作状态成功!”
其他的
echo“质量门失败!将作业状态设置为失败!”
出口1
fi

你想要实现什么??不清楚。你能在评论中写下你想要什么吗?@SouravAtta我想要一个质量门,这样当QG失败时我的构建就会失败。我在Jenkins有一个Maven项目,它使用“配置”选项,允许我从所说的“配置”选项的“构建”部分执行我的项目。目前,它只扫描我的项目并生成分析,但当QGfails@SouravAtta添加了一张图片,希望能够澄清我的目标。如果没有声纳分析,您将无法基于质量门使管道失效。您可以使用
质量门插件
。在管道配置中,在生成后操作下,选择
等待QualityGate
选项。这将有助于根据QualityGate状态使管道失败。@SouravAtta这是我最初的计划,但它存在漏洞,不幸的是,这不是我可以容忍的。是否可以在其中一个预处理步骤中同时运行SQ分析和QG?例如,是否可以配置“Execute SonarQube Scanner”选项来完成所有工作?或者构建部分需要首先发生吗?是的,在我使用Jenkinsfile的项目中,我曾经使用过它(我通过JsonSlurper从上述API中提取了值)。如果我理解正确的话,我可以使用一个名为“自定义脚本”的选项来编写groovy脚本以使用API?或者你指的是sonar.property文件(在这种情况下,我的脚本是什么?不确定我是否可以在那里使用groovy命令,
sonar.scanner.metadataFilePath
将只提供report-task.txt文件的内容。我是否需要类似于
sonar.qualitygate.wait
)的内容?此外,我还更新了我的帖子,以显示我一直在尝试的内容
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