web-dev-qa-db-ja.com

サーバーが起動するまでJenkinsパイプラインを待機させる

現在、ビルドを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
        }
    }
}
13
Nitek

彼らは パイプラインノードとプロセスプラグイン の新しいバージョンをリリースしました。これは 終了ステータスを返す のサポートを追加します。これは今仕事をしているようです:

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

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'
}
5