如果代码没有90%的测试覆盖率,我希望我的Jenkins构建失败。为此,我安装了Quality Gates
插件,该插件应检查SonarQube分析。
我在Jenkins
下的Quality Gates
下面有以下配置:
Name: SonarQubeServer
SonarQube Server URL: http://my-server.com:9000
SonarQube account login: admin
SonarQube account password: ****
SonarQube显示:Quality Gate Failed
Jenkins显示:SonarQube analysis completed: SUCCESS
并且构建过程。
任何想法为什么詹金斯没有得到质量门失败?
答案 0 :(得分:2)
最终我意识到我应该为我使用它的每项工作添加Quality Gates
作为Post Build Action
。
答案 1 :(得分:1)
您可以使用Shell命令执行此操作:如果有人需要,可以共享此信息
使用Sonar Rest api传递质量门时,将构建标记为失败。在Sonar Step之后添加“Execute Shell”并使用下面的代码 提示:在此步骤之前引入10秒的睡眠时间,以确保使用任务结果状态更新Sonar站点。
url = $(cat $ WORKSPACE / .sonar / report-task.txt | grep ceTaskUrl | cut -c11-)
curl -u admin:$ {admin_pwd} -L $ url | python -m json.tool
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}
如果[$ status = SUCCESS];然后
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}
否则
回声" Sonnar跑不成功"退出1
网络连接
curl -u admin:$ admin_pwd $ {analysisUrl} | python -m json.tool
curl -u admin:$ admin_pwd $ {analysisUrl} | python -m json.tool | grep -i" status" |切-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];然后
回声"质量门通过!将SonarQube作业状态设置为成功! "否则
退出1
回声"质量门失败!将SonarQube作业状态设置为失败! "网络连接
取消设置网址
未设置状态
取消设置analyzeID
unset analysisUrl
task.json
tmp.txt
error.txt
答案 2 :(得分:0)
插件质量门只返回状态:传递或失败,因此您可以从这两个标志的结果中建立jenkins的其他工作。但是如果你希望通过覆盖率resulat> 90%传递旗帜,你必须从sonarqube而不是jenkins配置它。在这种情况下,您可以想象这种情况:
测试覆盖率< 90 - > flag:失败了。詹金斯不打电话给其他工作。
测试覆盖率> 90 - >国旗:通过。詹金斯称其他工作。
我认为这可以帮助你。
答案 3 :(得分:0)
针对Sri的解决方案中存在某些类型/错误的问题。 这是使用声纳扫描仪构建的sonar4.5.5
if [ -e tmp.txt ];
then
rm tmp.txt
rm error.txt
rm task.json
fi
sleep 5
cat $WORKSPACE/.scannerwork/report-task.txt
url=$(cat $WORKSPACE/.scannerwork/report-task.txt | grep ceTaskUrl | cut -c11- )
echo $url
curl -u admin:pswd -L $url | python -m json.tool
curl -u admin:pswd -L $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://sonarserver/sonarqube/api/qualitygates/project_status?analysisId=${analysisID}"
echo ${analysisID}
echo ${analysisUrl}
else
echo "Sonar run was not success"
exit 1
fi
curl -u admin:pswd ${analysisUrl} | python -m json.tool
curl -u admin:pswd ${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