2016-05-04 19 views
1

私はJenkinsを使用して、毎日スケジューリングされるさまざまなジョブを管理して実行するシステムに変更を導入しています。実際のデータベースに書き込まないステージングセットアップと、実際のデータベースには書き込みを行わないセットアップがあります。Jenkinsのビルドプロセスに長い遅延を組み込むにはどうすればいいですか?

私は変更が押されたときに発生がしたいジェンキンス・フローは、これは

  1. 実行チェックです。
  2. ステージングシステムに展開します。
  3. 24時間待機します。
  4. ログをチェックして、ステージングシステムに過去24時間以内にエラーが発生していないことを確認します。
  5. 本番システムに展開します。

これらのビルドは、いつでも同時に実行することができます。私は午前11時に変更をプッシュし、ステージングに展開します。午後5時には私はより多くの変更を行い、ステージングにも展開します。翌日の午前11時には、変更の最初のセットだけが展開されてプロードされます。その日の午後5時に、2番目の変更セットが導入されます。

ここでは、ビルドフロープラグインを使用してwait_one_dayというジョブを作成し、sleep $((24 * 60 * 60))というジョブをbashシェルで実行するシステムを構築しました。

これが最もエレガントな解決策のように見える、と私は24時間(ビルド・フロー・ジョブの一つであり、wait_one_dayのための1)、我々は変更を加えるたびに、2つのビルドエグゼキュータを拘束しています欠点を持っていません。

これを行うにはこれ以上の方法がありますか、このプロセスに役立つプラグインはありますか?ジェンキンスの仕事は別のジェンキンスの仕事をワンオフとして実行する予定ですか?

誰かが私のデザインについて建設的な批判や示唆を持っていれば、同じ問題を解決する別のアプローチについて聞いても大丈夫です。

答えて

2

最近私が答えたsimilar SO questionがありましたが、確かにmy answer thereがあなたのシナリオに合っているとは確信していません。

潜在的に、4時間以内に定期的に実行されるステップ4 & 5を実行するジョブを動的に作成することができます。ここでキャッチするのは、実際にこのジョブを一度だけ実行し、そのジョブをビルドするステップ(groovyコードまたはシェルスクリプト)があることです。特定のタスクに対してクローンを作成してから変更することができる非アクティブ化されたテンプレートジョブを作成するだけでも簡単です。ステップ1とステップ2を実行するジョブの完了時にトリガーする中間ジョブが必要になります。中間ジョブはテンプレートから一時ジョブを作成します。

また、ジーンキンや外部の中で、ジョブを放棄する必要があるときのスケジューリングを含むいくつかのプロパティファイルやデータベースから実行される何らかのハンドラを作成することもできます。もしあなたがハンドラを書く道を行くつもりなら、少し余分な努力を払い、ジェンキンスプラグインを書くことを検討するかもしれません...

関連する問題