我目前正在开始将构建转换为Jenkins构建管道。在某个时刻,我们有必要等待在docker容器中启动Web应用程序。
我的想法是使用这样的东西:
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
}
}
}
答案 0 :(得分:26)
他们刚刚发布了Pipeline Nodes and Processes Plugin的新版本,增加了对returning the exit status的支持。 这似乎现在可以完成这项工作:
timeout(5) {
waitUntil {
script {
def r = sh script: 'wget -q http://remoterhoste/welcome.jsf -O /dev/null', returnStatus: true
return (r == 0);
}
}
}
答案 1 :(得分:5)
您可以使用wget选项来实现:
waitUntil {
sh 'wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}
120次尝试,再加上在重试之间等待1次,即使连接被拒绝也会重试,这可能会稍微多一点。因此,要确保它只有120秒,那么您可以使用shell中的timeout
:
waitUntil {
sh 'timeout 120 wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}