У меня есть сборка конвейера Дженкинса, которая редко (может быть, 1 из 20) зависает, а затем отключается.Я понятия не имею, что вызывает это, поэтому я хотел бы сбросить активные процессы, когда истекает время ожидания.
Сценарий groovy build выглядит так:
timeout(time: 20, unit: 'MINUTES')
{
baout.buildNodes.each {
name = it[0]
node = it[1]
cmd = it[2]
try {
stage ("Build ${name}") {
dir ("${node}") {
bat "${cmd}"
}
...
Таким образом, команда bat зависает иЯ хотел бы сбросить активные процессы, когда истекает время ожидания.Насколько я понимаю, тайм-аут посылает сигнал TERM, поэтому я попытался установить обработчик сигнала, но он не вызывается.
Я попытался DiagSignalHandler :
import sun.misc.Signal
import sun.misc.SignalHandler
class DiagSignalHandler implements SignalHandler {
private oldHandler
// Static method to install the signal handler
public static install(signal) {
def diagHandler = new DiagSignalHandler()
diagHandler.oldHandler = Signal.handle(signal, diagHandler)
}
public void handle(Signal sig) {
println("Diagnostic Signal handler called for signal "+sig)
// Output information for each thread
...
// Chain back to previous handler, if one exists
if ( oldHandler != SIG_DFL && oldHandler != SIG_IGN ) {
oldHandler.handle(sig)
}
}
}
...
stage ("Build ${name}") {
DiagSignalHandler.install(new Signal("TERM"))
dir ("${node}") {
...
который никогда не вызывался.
Я также попробовал рецепт из Обработка сигнала с использованием «TERM» , что приводит к
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: Script1$1(Script1)
Любые идеи, как обращаться с ловушкой, илиспособы отладки тайм-аута?Благодаря.