詹金斯没有收到质量门故障

时间:2017-02-07 12:47:26

标签: jenkins sonarqube

如果代码没有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并且构建过程。

任何想法为什么詹金斯没有得到质量门失败?

4 个答案:

答案 0 :(得分:2)

最终我意识到我应该为我使用它的每项工作添加Quality Gates作为Post Build Action

答案 1 :(得分:1)

您可以使用Shell命令执行此操作:如果有人需要,可以共享此信息

使用Sonar Rest api传递质量门时,将构建标记为失败。在Sonar Step之后添加“Execute Shell”并使用下面的代码 提示:在此步骤之前引入10秒的睡眠时间,以确保使用任务结果状态更新Sonar站点。

从工作区

中的report-task.txt获取TASKURL

url = $(cat $ WORKSPACE / .sonar / report-task.txt | grep ceTaskUrl | cut -c11-)

从Sonar Server

获取任务属性

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}

如果SonarScan成功完成,则设置分析ID&网址。

如果[$ 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

网络连接

使用分析URL

获取SonarGate详细信息

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