Заставьте конвейер Дженкинса ждать, пока сервер не будет готов
В настоящее время я начинаю преобразовывать наши сборки в конвейер сборки Дженкинса. В определенный момент нам необходимо дождаться запуска веб-приложения в контейнере 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 ответа:
Они только что выпустили новую версию плагина узлов и процессов конвейера, который добавляет поддержку , возвращающего статус выхода. Это, кажется, делает работу теперь:
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' }