2

現在のビルドプロセス

私たちは開発者の小さなチーム(プロジェクトに応じて2〜4人)であり、現在Phingを使用して、稼働前にステージング環境にコードをデプロイしています。コードをSVNリポジトリに保持します。ここで、トランクは現在アクティブな開発を保持し、特定の時間に、テストしてから(成功した場合)、タグ付けしてステージング環境にエクスポートするブランチを作成します。ここでもすべてがうまくいけば、最終的に本番サーバーにデプロイします。アクションは高度に自動化されていますが、常に人間の介入によってトリガーされます。


DOUBT

ここで、プロセスに(ハドソンとの)継続的インテグレーションを導入したいと思います。残念ながら、CIがビルドプロセスに多少干渉し、特定の問題を引き起こす可能性があるため、アクティビティの同期についていくつか疑問があります。

自動化されたCIサイクルには一定の頻度で自動的に実行されるアクションがあることを考えると、「統合」には2つの考えられるケースがあり、それぞれに独自の問題があります。

  1. ケースA:各CIサイクルは、独自の名前で新しいブランチを生成します。このような名前を使用して、コードをSVNからステージング環境に手動で(現在のようにphingを介して)エクスポートします。ここで私が見ている問題は、(特定の対策を講じない限り、IEの削除)、ブランチの数が制御不能になりやすいことです(N分ごとに新しいビルド/ブランチが作成されるように、頻繁にコミットするとします)。 。

  2. ケースB:各CIサイクルは、「current」という名前の新しいブランチを作成します。このブランチは、手動でステージングにエクスポートすることを決定した場合にのみ、一意の名前でタグ付けされます。現在のブランチは、いずれの場合も、次のCIサイクルが開始されるとすぐに削除されます。ここで見られる問題は、誰かが「現在の」ブランチをステージングにタグ付け/エクスポートしているときに新しいサイクルが開始され、一貫性のないビルドが作成される可能性があることです(しかし、私は知らないことを告白しているので、ここでは悲観的すぎますSVNがこれに対する組み込みの保護を提供するかどうか)。


以上のことを踏まえると、上記のアプローチはどれも私たちに完全に満足しているようには見えないので、同じような経験を持つ人がこのテーマについていくつかのヒントを教えてくれるのではないかと思いました。

全体像で完全に省略した重要なものはありますか?ご清聴ありがとうございました&(事前に)ご協力いただきありがとうございます!

4

2 に答える 2

2

プロジェクトで使用したアプローチは、コードが変更された場合にのみCIビルドを実行することでした。これは、コミット後フックとしてSVNで構成できます。次に、認証されたURLを介してHUDSONでビルドをリモートでトリガーできます。問題は、ジョブを作成する必要があるため、ビルドシステムでサポートされていない限り、ハドソンがリポジトリに新しいブランチがあることを認識して、そのためのジョブを作成する方法がないことです。

于 2010-04-16T06:55:57.040 に答える
2

どちらのオプションでも、「各CIサイクルで新しいブランチが生成される」から始めます。それをしないでください。プロジェクトが混乱しないように、ブランチの数を最小限に抑え、常に制御(手動で作成)する必要があります。メインラインでの開発の準備ができており、リリース候補(トランクからのブランチ)を作成できるかどうかの決定は簡単ではありません。

CIサイクルは、コードの変更によってトリガーされ、それらの変更の統合によってアプリケーションが破損しないようにします。したがって、開発のアクティブなストリームごとにハドソンでプロジェクトを設定することをお勧めします。これは、メインライン用、本番バージョンを表すブランチ用(バグ修正用)、そして最終的にはRC用です。

継続的インテグレーションに関するMartinFowlerの記事は、CI実装の理由と方法に関する優れたガイドです。

于 2010-06-01T19:36:48.440 に答える