我在Jenkins运行带有nosetests的测试用例。一般来说,它将有100个测试用例,我想在少于20个测试用例失败时标记构建不稳定。如果超过20个测试用例失败,则标记构建失败。
我跑的命令:
nosetests test.py --tc-file config.yml --tc-format yaml
首先,我尝试将构建状态更改为Unstable但仍然失败。
我使用的groovy脚本:
manager.addWarningBadge("Thou shalt not use deprecated methods.")
manager.createSummary("warning.gif").appendText("<h1>You have been warned!</h1>", false, false, false, "red")
manager.buildUnstable()
执行前两行代码,但作业仍标记为“失败”。
我的jenkins配置有什么问题吗?或者groovy postbuild插件不适用于nosetest?
这是控制台输出:
FAILED (failures=2)
Build step 'Execute shell' marked build as failure
Build step 'Groovy Postbuild' marked build as failure
Finished: FAILURE
答案 0 :(得分:11)
正如DevD所述,.post-title a {
position: relative;
}
是一个比FAILED
更重要的构建状态。这意味着在步骤失败后调用UNSTABLE
或manager.buildUnstable()
仍会保留构建结果manager.build.setResult(hudson.model.Result.UNSTABLE)
。
但是,可以使用反射将失败的构建结果状态覆盖为FAILED
:
UNSTABLE
下面的示例遍历构建日志行,查找特定的正则表达式。如果发现它将改变(降级)构建状态,则添加徽章&amp;附加到构建摘要。
manager.build.@result = hudson.model.Result.UNSTABLE
注意:这会迭代每一行,因此假定这些匹配是唯一的,或者您需要徽章和每个匹配行附加的摘要!
构建后的结果是:
errpattern = ~/TIMEOUT - Batch \w+ did not complete within \d+ minutes.*/;
pattern = ~/INSERT COMPLETE - Batch of \d+ records was inserted to.*/;
manager.build.logFile.eachLine{ line ->
errmatcher=errpattern.matcher(line)
matcher=pattern.matcher(line)
if (errmatcher.find()) {
// warning message
String errMatchStr = errmatcher.group(0) // line matched
manager.addWarningBadge(errMatchStr);
manager.createSummary("warning.gif").appendText("<h4>${errMatchStr}</h4>", false, false, false, "red");
manager.buildUnstable();
// explicitly set build result
manager.build.@result = hudson.model.Result.UNSTABLE
} else if (matcher.find()) {
// ok
String matchStr = matcher.group(0) // line matched
manager.addInfoBadge(matchStr);
manager.createSummary("clipboard.gif").appendText("<h4>${matchStr}</h4>", false, false, false, "black");
}
}
答案 1 :(得分:2)
实际上这是预期的工作方式。
偏好 失败 - &gt;不稳定 - &gt; SUCCESS
使用groovy post build我们可以将较低的结果(SUCCESS)更改为更高的首选项(FAILED / UNSTABLE)。 反之亦然。
作为Nosetest之后的解决方法,添加一个执行shell,然后退出0&#34;。所以总是你的结果将是较低的偏好。现在通过你的帖子构建groovy脚本根据测试结果决定你的退出标准。这实际上是一个调整..将探索更多并更新你。