让詹金斯管道等到服务器启动
Make Jenkins pipeline wait until server is up
我目前正开始将我们的构建转换为 Jenkins 构建管道。在某个时刻,我们有必要等待 docker 容器中的 Web 应用程序启动。
我的想法是使用这样的东西:
timeout(120) {
waitUntil {
sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
}
}
不幸的是,这会导致管道构建失败:
ERROR: script returned exit code 4
有什么简单的方法可以做到这一点吗?
编辑:
我设法使用以下代码使其工作,但该阶段仍标记为失败(尽管构建继续并最终标记为绿色)。
timeout(120) {
waitUntil {
try {
sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
return true
} catch (exception) {
return false
}
}
}
您可以使用 wget 选项来实现:
waitUntil {
sh 'wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}
120 次尝试,加上重试之间等待 1 秒,即使连接被拒绝也会重试,这可能会稍微多一些秒。所以为了确保它只有 120s,那么你可以使用 timeout
from shell:
waitUntil {
sh 'timeout 120 wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}
他们刚刚发布了 Pipeline Nodes and Processes Plugin which adds support for returning the exit status 的新版本。
现在这似乎可以完成工作:
timeout(5) {
waitUntil {
script {
def r = sh script: 'wget -q http://remoterhoste/welcome.jsf -O /dev/null', returnStdout: true
return (r == 0);
}
}
}
如果您在 jenkins 节点上没有 wget(例如默认 docker 图像),您也可以像这样安装和使用 HTTPRequest Plugin。
timeout(5) {
waitUntil {
script {
try {
def response = httpRequest 'http://server:8080/app/welcome.jsf'
return (response.status == 200)
}
catch (exception) {
return false
}
}
}
}
我目前正开始将我们的构建转换为 Jenkins 构建管道。在某个时刻,我们有必要等待 docker 容器中的 Web 应用程序启动。
我的想法是使用这样的东西:
timeout(120) {
waitUntil {
sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
}
}
不幸的是,这会导致管道构建失败:
ERROR: script returned exit code 4
有什么简单的方法可以做到这一点吗?
编辑:
我设法使用以下代码使其工作,但该阶段仍标记为失败(尽管构建继续并最终标记为绿色)。
timeout(120) {
waitUntil {
try {
sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
return true
} catch (exception) {
return false
}
}
}
您可以使用 wget 选项来实现:
waitUntil {
sh 'wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}
120 次尝试,加上重试之间等待 1 秒,即使连接被拒绝也会重试,这可能会稍微多一些秒。所以为了确保它只有 120s,那么你可以使用 timeout
from shell:
waitUntil {
sh 'timeout 120 wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}
他们刚刚发布了 Pipeline Nodes and Processes Plugin which adds support for returning the exit status 的新版本。 现在这似乎可以完成工作:
timeout(5) {
waitUntil {
script {
def r = sh script: 'wget -q http://remoterhoste/welcome.jsf -O /dev/null', returnStdout: true
return (r == 0);
}
}
}
如果您在 jenkins 节点上没有 wget(例如默认 docker 图像),您也可以像这样安装和使用 HTTPRequest Plugin。
timeout(5) {
waitUntil {
script {
try {
def response = httpRequest 'http://server:8080/app/welcome.jsf'
return (response.status == 200)
}
catch (exception) {
return false
}
}
}
}