1

Jenkins でジョブを開始するポスト コミット フックを実装しました。私たちのインスピレーションは次のとおりです: SVN post-commit と Jenkins の問題

意図したとおりに機能し、Yossi が説明したように、各ジョブのポーリングを空白に設定しました。

私の質問は次のとおりです。Jenkins サーバーがダウンしたとき、あなたはどうしますか? とにかくコミットは受け入れられますが、Jenkins サーバーがダウンしているため、ジョブは開始されません...サーバーが再起動されたときにジョブが開始されるようにするにはどうすればよいですか?

4

3 に答える 3

0

Jenkins は、何かをビルドする必要があるかどうかを確認するために、ソース リポジトリを 1 分間に 1 回ポーリングします。

CVS を使用したときは、変更が発生したかどうかを確認するために CVS リポジトリをポーリングするのに時間がかかり、プロセッサを集中的に使用するアクティビティだったため、ポストコミット フックを使用して Subversion ビルドを強制しました。CVS を使用して Jenkins で 12 以上のプロジェクトを実行すると、Jenkins と CVS リポジトリのクロールが遅くなります。コミット後のトリガーを使用することが唯一の方法でした。しかし、私たちが遭遇した問題の 1 つは、Jenkins がダウンしていると、不足しているビルドが実行されないということです。

Subversion に移行したとき、Jenkins が Subversion リポジトリを毎分ポーリングするように設定するだけでした。Subversion で変更が行われたかどうかを確認するのは非常に高速で、リソースもほとんど必要ありません。Jenkins サーバーがダウンしている場合、Jenkins はすぐにさまざまな Subversion プロジェクトをポーリングし、中断したところから実質的にビルドを開始します。

この動作にはいくつかの欠点と、一部のサイトで Jenkins がリポジトリをポーリングすることを許可しない理由があります。

  • ビルドが完了するまでに 59 秒ほどかかる場合があります。ビルドに 2 分かかる場合、開発者は変更が成功したかどうかを確認するために 50% 長く待機する可能性があります。
  • その 1 分間に 2 人の開発者がコミットすると、両方の変更がビルドされます。障害が発生した場合、問題の原因となった変更を特定することはできません。

私にとって、これらは些細な問題であり、Jenkins は私が気にしなくても自動的に処理してくれるという事実が気に入っています。ただし、Jenkins で Subversion トリガー ビルドが必要な場合は、ビルド コマンドを発行する post-commit フックを使用して実行できますが、おわかりのように、Jenkins がダウンしている場合、ビルドを実行する必要があることを学習しません。 .

これを回避する 1 つの方法は、Jenkins でポーリングを実行し、コミット後のフックを使用して Jenkins ビルドをトリガーすることです。ファイルまたはディレクトリをポーリングし、それからビルドをトリガーするファイルシステム SCM プラグインがあります。Jenkins へのコマンド ライン インターフェイスもあります。コミット後のフックでこれらを組み合わせることができます。

コマンド ライン インターフェイスを使用して、Jenkins が稼働しているかどうかを確認します。そうであれば、通常どおり URL を介してビルドをトリガーできます。Jenkins が稼働していない場合は、ポーリング ファイルを更新します。

Jenkins は約 5 分ごとにこのファイルをポーリングできます (分単位のトリガーを実行する必要はありません)。このファイルが変更されていることを検出すると、自動的に新しいビルドが実行されます。これにより、Jenkins がダウンした場合に、ポーリング メカニズムをバックアップとして使用できます。

于 2013-11-20T16:01:45.397 に答える
0

この問題に対する当社の解決策:

post-commit フックで jenkins サーバーを直接呼び出す代わりに、中央の Quality アプリケーションを呼び出します (すべての Jenkins サーバー、ジョブなどを制御します)。このアプリケーションは、ビルドをそれぞれの Jenkins サーバーにプッシュします。Jenkins サーバーがダウンしている場合、アプリケーションは後で再試行します。

于 2013-11-21T09:17:27.090 に答える