Поймать сигнал TERM в скрипте Jenkins Groovy (Windows) - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть сборка конвейера Дженкинса, которая редко (может быть, 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)

Любые идеи, как обращаться с ловушкой, илиспособы отладки тайм-аута?Благодаря.

...