現在、ビルドを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
}
}
}
彼らは パイプラインノードとプロセスプラグイン の新しいバージョンをリリースしました。これは 終了ステータスを返す のサポートを追加します。これは今仕事をしているようです:
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秒間待機し、接続が拒否された場合でも再試行します。これはもう少し長くなる場合があります。したがって、120秒であることを確認するには、Shellからtimeout
を使用できます。
waitUntil {
sh 'timeout 120 wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}