我们正在每晚构建中构建大量代码变体,并且自然会经常出现间歇性错误,即使单个错误的可能性仅为百分之几。一些最常见的是在构建期间断开连接的奴隶和不响应的服务器。
构建失败分析器插件可以对不同的失败原因进行分类,但我们需要的是一个可以对这些问题采取行动的插件,并在出现间歇性错误时重新构建构建。优选地,解决方案应该适合我们的构建流程,以便结果传播到创建构建报告的作业。
是否有这样的插件或其他工具来执行此操作?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您使用的是管道,则可以定义一个通用重试方法,该方法将调用和可重试策略作为输入。
它的作用是tee
在一个单独的文件中执行(使用Pipeline Utility Steps插件的tee步骤),然后读取该文件并检查可重用策略是否适用。
类似的东西:
def retry(execution, isRetriable) {
def retryCount = 0
while (true) {
def file = "execution-${System.currentTimeMillis()}.log"
try {
tee(file) {
execution()
}
break
} catch (Exception e) {
def output = readFile(file: file)
if (isRetriable(output)) {
retryCount++
if (retryCount == 5) {
throw e
}
} else {
throw e
}
}
}
}
然后用retry
包装您的调用:
retry(
{ stepThatOccasionallyFails() },
{ output -> output.contains('a random error!') }
)