如何使用Groovy Postbuild将Jenkins构建标记为不稳定

10

我正在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
2个回答

12

正如 DevD 所述,FAILEDUNSTABLE 更重要。这意味着在一个步骤失败后调用 manager.buildUnstable()manager.build.setResult(hudson.model.Result.UNSTABLE) 仍将使构建结果为 FAILED

然而,你可以通过反射来覆盖已失败的构建结果状态为 UNSTABLE

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");
    }
}
< p >< em >注意:此操作会遍历每一行,因此假设这些匹配项是唯一的,或您想要在每个匹配行后追加标记和摘要!

构建后结果为:

Build step 'Execute Groovy script' marked build as failure
Archiving artifacts
Build step 'Groovy Postbuild' changed build result to UNSTABLE
Email was triggered for: Unstable

2

实际上这是预定的工作方式。

偏好设置 失败 -> 不稳定 -> 成功

使用Groovy后置构建,我们可以将较低的结果(成功)更改为更高的优先级(失败/不稳定)... 反之则不行。

在您的Nosetest之后添加一个执行shell和"exit 0"来解决问题。因此,您的结果始终是较低的优先级。现在通过您的后置构建Groovy脚本根据测试结果决定退出标准。这实际上是一种调整..将进一步探索并通知您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接