継続的インテグレーションとDVCSのパターン


12

現在SubversionとTeamCityを使用していますが、Mercurial(特にFogBugzユーザーのKiln)の使用に移行します。

明らかにこれにより、開発パターンに変更(できれば改善)がもたらされます(2人全員!)が、私が悩んでいる1つの問題は、継続的な統合/ CIサーバーのメリットを享受できるように物事を構造化する方法です(利益が存在し、今後も存在することは当然のことであり、その議論はこの質問の範囲外です。

SVNを使用すると、限られた数の中央リポジトリにコミットします-事実上プロジェクトごとに1つ(多かれ少なかれ1つのVisual Studioソリューション)なので、ビルドをトリガーし、すべてのファイルがコミットされていないという安心感を得るのが簡単です依存関係などの漂流など。しかし、mercurialを適切に進める場合は、リポジトリインスタンスを増やしたいと思うでしょう。変更点は、一般に決定的な「ライブ」レポジトリに向かって流れると予想されます。私が苦労している問題は、ライブリポジトリが私にとってCIビルドをトリガーするには遅すぎるように見えることです。開発者ごとにプロジェクトごとに1つのCIビルドが多すぎると思われます(そして他の問題を引き起こします)。

私は少し釣りをしていますが、それは、中央のSubversionリポジトリが提供するものの1つ(私はセットアップで!)が、何をいつ構築するかについて非常に明確だからです。


nb Mercurialを継続的インテグレーションで使用するメカニズムについては質問していません。個人的なプロジェクトの御and走、そのパターンと構造、そして頭を動かそうとしている作業プラクティス/ワークフローを持っています。


セントラル/「ライブ」レポジトリからビルドをトリガーするには遅すぎると思うのはなぜですか?
c_maker

まだそこに行ったことがない場合は、Kilnスタック交換サイト(kiln.stackexchange.com)にアクセスすることをお勧めします。彼らはこれを設定する方法についてかなりの内容を持っています(kiln.stackexchange.com/questions/29/…。個人的には、機能ごとにブランチを使用し、ビルドサーバーを「マスター」ブランチに向けます。 )
クリスフィリップス

@クリス- CIの問題に対処ません、実際にはありません、私が持っている、...
Murph

回答:


2

まず、TeamCityでプロジェクトごとに複数のビルドを作成するのが実際の方法です。プラットフォームの性質により、非常に簡単になります-コピーボタンは理由があります。

いずれにせよ、SVNを使用しているときは、通常、各プロジェクトに対して2つのビルドを実行しました。1つはメイン開発ライン(この場合はトランク)を指し、もう1つはリリースブランチを指します。このビルドセットアップをHGに引き継いで、これに類似した分岐モデルに従いました。現在のSVNリビジョン番号を使用できなくなったため、実際の課題はビルド番号に関する新しいファンクシュウェアを見つけることだけでした。

特に一度に多くの作業が行われ、より速いフィードバックサイクルが必要な場合は、比較的頻繁にプッシュすることをお勧めします。DCVSであるからといって、1日に1回だけプッシュする必要があるわけではありません。


ワイアット、私の考えでは、作業単位(完了)が完了したときに発生するはずです-DVCSの利点の1つは、壊れたコードをローカルでコミットできることです。一日の終わりだから、スケジュールで何かをするという概念は本当に嫌いです。「バックアップ」の別の問題があります。それは-私にとっては-コミット時に-ただバックアップするために存在する別のクローンに横にプッシュするルールを設定することです。
マーフ

2
トリックは、作業単位の定義は何ですか?「この機能は完全です」または「このブリックは正常に配置されました」ですか。特に明確に削除された開発ブランチがあるブランチモデルでは、後者に向かう傾向があります。機能を壊すのはブランチをフィーチャーするのに最適です。それらの実行時間の長いものは、可能であればCIビルドも取得できます。特にキッチンに複数の料理人がいる場合。
ワイアットバーネット

「作業単位」の定義に同意するため、全体のモデル(プロジェクトごとに複数のビルドが既にあり、「CI」ビルドと「展開」ビルドの両方に対応している)に少し苦労しています。そうです、答えはたくさんのビルドを結びつけることですので、最終的に私の本当の問題は小切手に署名されることになります!参照される分岐モデルもほぼ同じように見えます。全体的なパターンを引き続き検討します(さらに、キルンの詳細を考慮してさらに調整されるようにします)
マーフ

2

私たちは約1年間Kilnを使用しており、いくつかの異なることを試みてきました。最終的には、ブランチクローンではなく名前付きブランチを次のブランチ戦略で使用します。

  • デフォルトは「完了した」開発を追跡します
  • 機能ブランチは現在進行中の作業を追跡します
  • リリースブランチは、デフォルトからリリースしたポイントを追跡します

したがって、作業は、defaultの現在のヒントから機能ブランチを作成することから始まります。ときに機能ブランチは *に行われ、ブランチは閉じられ、バックにマージされるデフォルト

ある時点で、リリースする準備ができたと判断したため、defaultの現在のヒントから新しいリリースブランチを作成します。これにより、リリースブランチにコミットすることにより、現在運用中のコードに変更を加えながら、機能ブランチdefaultでのアクティブな開発を引き続き行うことができます

継続的な統合に関しては、次の2つのことを行います。

  • デフォルトのステータスを監視する「常時接続」統合
  • リリースブランチの新しい統合

デフォルトの枝の仕事は、私たちは私たちのメインのソースツリーは常に安定していることを知ることができます- リリースブランチの仕事は、私たちはそれらの枝が安定しており、我々は生産への放出をプッシュする必要があるビルド出力を提供してくれることを知ってみましょう。

*「完了」の定義は、機能が最新のものであり、デフォルトからのマージがあり、コードレビューで承認されていることです。


1

HgのようなDVCSに移行すると、「分散された部分」を取得するだけでなく、適切な分岐とマージのフルパワーも取得できます。

これで、優れた課題トラッカーと優れたSCMが得られることを考慮すると、各タスクにブランチを作成してみませんか?

「タスクごとの分岐」パターンは新しいものではありませんが(Berczukの本を確認してください)、間違いなく試してみてください。

ここで詳細に説明し、CIと「制御」の長所と短所をここで説明しまし


機能とメンテナンスの両方の分岐とSubversionとのマージを楽しく、熱心に、そして成功裏に完了したので、「良い」よりも「良い」と言うでしょう(-:
Murph
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.