如何使用 groovy postbuild 标记 jenkins 构建不稳定
How to mark the jenkins build unstable with groovy postbuild
我是 运行 在 Jenkins 中使用鼻子测试的测试用例。一般来说,它会有 100 个测试用例,当少于 20 个测试用例失败时,我想将构建标记为不稳定。如果超过 20 个测试用例失败,则将构建标记为失败。
命令我运行:
nosetests test.py --tc-file config.yml --tc-format yaml
首先,我尝试将构建状态更改为不稳定,但仍然失败。
我使用的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
实际上这是预期的工作方式。
偏好
失败 -> 不稳定 -> 成功
使用groovy post构建我们可以将较低的结果(成功)更改为较高的偏好(FAILED/UNSTABLE)..
反之则不然。
作为 Nosetest 后的解决方法,添加执行 shell 和 "exit 0"。所以你的结果总是较低的偏好。现在通过您的 post build groovy 脚本根据测试结果决定您的退出标准。这实际上是一个调整......将探索更多并更新你。
正如 DevD 所述,FAILED
是比 UNSTABLE
更重要的构建状态。这意味着在步骤失败后调用 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");
}
}
注意:这会遍历每一行,因此假设这些匹配项是唯一的,或者您希望为每个匹配的行附加一个徽章和摘要!
Post-构建结果为:
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
我是 运行 在 Jenkins 中使用鼻子测试的测试用例。一般来说,它会有 100 个测试用例,当少于 20 个测试用例失败时,我想将构建标记为不稳定。如果超过 20 个测试用例失败,则将构建标记为失败。
命令我运行:
nosetests test.py --tc-file config.yml --tc-format yaml
首先,我尝试将构建状态更改为不稳定,但仍然失败。
我使用的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
实际上这是预期的工作方式。
偏好 失败 -> 不稳定 -> 成功
使用groovy post构建我们可以将较低的结果(成功)更改为较高的偏好(FAILED/UNSTABLE).. 反之则不然。
作为 Nosetest 后的解决方法,添加执行 shell 和 "exit 0"。所以你的结果总是较低的偏好。现在通过您的 post build groovy 脚本根据测试结果决定您的退出标准。这实际上是一个调整......将探索更多并更新你。
正如 DevD 所述,FAILED
是比 UNSTABLE
更重要的构建状态。这意味着在步骤失败后调用 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");
}
}
注意:这会遍历每一行,因此假设这些匹配项是唯一的,或者您希望为每个匹配的行附加一个徽章和摘要!
Post-构建结果为:
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