[英]How to mark the jenkins build unstable with groovy postbuild
我正在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
正如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");
}
}
注意:這會迭代每一行,因此假設這些匹配是唯一的,或者您希望為每個匹配的行追加徽章和摘要!
構建后的結果是:
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
實際上這是工作的預期方式。
偏好失敗 - >不穩定 - >成功
使用groovy post build我們可以將較低的結果(SUCCESS)更改為更高的首選項(FAILED / UNSTABLE)..反之亦然。
作為Nosetest之后的解決方法,添加一個執行shell並“退出0”。 所以總是你的結果將是較低的偏好。 現在通過你的帖子構建groovy腳本根據測試結果決定你的退出標准。 這實際上是一個調整..將探索更多並在此更新您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.