Заставьте конвейер Дженкинса ждать, пока сервер не будет готов


В настоящее время я начинаю преобразовывать наши сборки в конвейер сборки Дженкинса. В определенный момент нам необходимо дождаться запуска веб-приложения в контейнере docker.

Моя идея состояла в том, чтобы использовать что-то вроде этого:

timeout(120) {
    waitUntil {
        sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
    }
}

К сожалению, это приводит к сбою сборки конвейера:

Ошибка: скрипт вернул код выхода 4

Есть ли какой-нибудь простой способ заставить это работать?

редактировать:

Мне удалось это сделать. работа с использованием следующего кода, но этап по-прежнему помечается как неудачный (хотя сборка продолжается и помечается зеленым цветом в конце).

timeout(120) {
    waitUntil {
        try {
            sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
            return true
        } catch (exception) {
            return false
        }
    }
}
2 7

2 ответа:

Они только что выпустили новую версию плагина узлов и процессов конвейера, который добавляет поддержку , возвращающего статус выхода. Это, кажется, делает работу теперь:

timeout(5) {
    waitUntil {
       script {
         def r = sh script: 'wget -q http://remoterhoste/welcome.jsf -O /dev/null', returnStatus: true
         return (r == 0);
       }
    }
}

Для этого можно использовать параметры wget:

waitUntil {
    sh 'wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}

120 попыток, плюс ожидание 1 С между попытками, повторите попытку даже в случае отказа соединения, это может быть немного больше секунд. Поэтому, чтобы убедиться, что это только 120s, вы можете использовать timeout из shell:

waitUntil {
    sh 'timeout 120 wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}