GitのようなDVCSは、継続的インテグレーションを使用するチームにとって不適切ですか?
-
22-07-2019 - |
質問
私のチームの開発プロセスは、継続的な統合に基づいています。作成するブランチは、リリース時のメンテナンスブランチのみですが、それ以外の場合、開発者は定期的に(より頻繁ではないが毎日)トランクにコミットすることが期待されるため、すべての作業が常に統合され、継続的にテストされ、すべてが良好です。
DVCS についての私の理解は、ブランチに最適だということです。数年前、これは非常に便利なチームで働いていました。すべての開発がブランチで行われ、完了してテストされたときにのみマージされたためです。しかし、これは継続的インテグレーションとは異なる哲学でした。
しかし、継続的な統合を使用するチームにとって、 Git は特に関係がなく、変更をマージするのに忘れる可能性のある追加の手順が必要な場合、継続的な統合プロセスさえ妨げる可能性があります。
DVCSには他の利点があると確信しています(たとえば、ローカルであるためコミットが非常に高速であり、開発者が作業を続けている間にバックグラウンドでメインブランチとマージできる可能性があります)。
しかし、この質問については、DVCSと継続的インテグレーションを使用するチームが、矛盾しているように見える2つの哲学をどのように調和させるかに興味があります。私は主に実際にこれをしている人々からの連絡に興味があります。
解決
実際にはDVCSにより、継続的統合がはるかに簡単になりました。
中央VCSでは、すべての開発者がトランクで直接コミットする権利を持っているため、バグのあるコードをコミットできます。 CIは事後に検出します。そのため、CIを使用してもトランクが破損する可能性があります。
一方、DVCSの世界での基本的な操作は、分岐とマージです。マージは明示的であり、トランクへのコミットとは別のプロセスであるため、トランクに到達する前にマージの結果をいつでも確認することができます。私はGitの経験はありませんが、Bazaar VCSの開発者は、PQMツールの助けを借りて少なくとも3.5年間この技術を成功裏に使用しています。
基本的に、PQMワークフローは次のようになります。開発者はブランチを公開してマージできるようにし、次にマージ手順を記載した特別な電子メールをPQMボットに送信します。 PQMはマージ要求を受信すると、別個の統合ブランチ(トランクのコピー)を作成し、開発者のブランチをマージして、結果のコードでテストを実行します。すべてのテストに合格すると、統合ブランチがトランクにプッシュされます。そうでない場合、開発者は失敗したテストのログを含む電子メールを受け取ります。
Bazaarプロジェクトのすべてのテストの実行には時間がかかりますが、テストは別のサーバーでオンデマンドで実行されます。開発者はマージによってブロックされることはなく、他のタスクで作業を続けることができます。
PQMベースのマージワークフローの結果、bzrトランクが破損することはありません(少なくとも十分な受け入れテストと回帰テストがある限り)。
他のヒント
すべてのDVCSは、中央リポジトリを使用するワークフローで使用できるため、問題はありません。ポリシーは、開発者がポリシーが非分散VCSへのコミットを指示するのとまったく同じ方法で、変更を中央リポジトリにプッシュする必要があることを指示しています。開発者がパッチセットを編集できるようにする追加のツールは、決して邪魔にならず、実際、保守可能なコードベースの生成をはるかに容易にします。
GitのようなDVCSを使用しても、中央リポジトリに定期的にコミットすることを妨げません。ただし、中間コミットをローカルで行い、完了したら中央リポジトリにのみ変更をプッシュできることを意味します。
この方法により、他の開発者のビルドを壊すことなく、機能を途中で実装している場合でもソース管理の利点が得られます。
Hudsonなどの継続的統合ツールはDVCSをサポートしているため、分散バージョン管理との継続的統合を調和させることができると思われます。
まず、DVCSでは、トピックブランチワークフローCIなどのワークフローを使用する必要が少なくなると思います。第二に、準備ができたらプッシュする(単一の、中央の)継続的統合リポジトリーをセットアップし、CIをフックします。
2009年7月8日追加:
たとえば、 GitHubブログの継続的な統合のスプリングクリーニングの投稿を参照してください。 。
これを説明するのに役立つ2つのアイデア:
- DVCSは、コミットとマージを分離します。
- CIは、選択したリポジトリに対して実行されます。
問題の核心は、CIツールの実行対象となるリポジトリーへのマージ方法です。開始時にリポジトリを1つだけ選択することができます。