継続的な統合環境をセットアップする場合、ビルドサーバーはコードをプルしてブランチ間でマージする必要がありますか?
または、自動マージに依存しているため、通常は問題が発生します(手動での介入が必要になります)。
CIシステムがマージを実行するのを見たことがありません。理論的には、そのように設定することもできますが、前述のように、マージの問題が発生するとビルドが中断します。
CI環境には通常、「ビルド」ブランチとして特定の固定ブランチがあり、CIサーバーは新しいチェックインがないかそのブランチを監視して、新しいビルドサイクルを開始します。
CircleCI、私のホストされているCIサービス これを設定できます。 Circleはデフォルトですべてのブランチを自動的に構築します。私たちのコードでは、マスター上のグリーンビルドは自動的に本番ブランチにマージされます。もちろん、これは、適切なテストスイートがある場合にのみ行ってください。
誰もが直接プロダクションに移行することはないので、今ではそのケースは簡単です。
ここには、面白い仕事がたくさんあると思います。最終的には、すべてのバグ修正ブランチをマスターオングリーンに自動マージさせたいと思います。私はバグに取り組んでいて、すべてのテストを実行してから、(早送りではなく)マスターとマージする必要があることを発見し、すべてのテストを再度実行することを忘れ、最終的にはビルド。
私が書きたい機能は、「ブランチXとマージします(緑色の場合)」というコミットメッセージのコメントです。そうすれば、マスターを壊すことは決して不可能です。
ここでの他の応答は私にはあまり意味がありません。 CIシステムは馬鹿げている必要はありません。マージせずにユーザーに通知することで、マージの競合を適切に処理できる必要があります。そして、マスターや本番などの「共有」ブランチでは、マージは常に早送りである必要があります!
絶対にしないでください。自動マージは1つの理由にすぎません。さらに重要なのは、トランクを壊すことを恐れずに、完了するまでブランチにコミットできることです。
ただし、Jenkinsなどのツールを使用している場合は、ブランチ用に別の自動ビルドを追加して、コミットに関するフィードバックを継続的に取得したい場合があります。
Automated merge between branches? - That is simply not a good idea.
CIは優れたプロセスであり、比較的大きなプロジェクトのためにセットアップする必要があります。しかし、私は決して信頼しないを自動マージに使用します。誤ってマージされたファイルを取得してcompilation error
または偶数価値unintended change in coding logic
。
ここでの回答のほとんどは、自動マージの問題を指摘しています。ただし、本番ブランチからテストブランチに正常にマージするために使用しました(ホットフィックスなどは自動的に下位にマージされます)。また、テストブランチから開発ブランチへ(テスト中に発見された問題の修正は、自動的に下位にマージされます)。私たちの場合、すべての自動化されたマージは本番環境から離れ、コードを本番環境にプッシュする前に、マージの結果を確認およびテストする機会が与えられました。
プロセスは完璧だったと言いたいのですが、マージの競合が人間の介入を必要とする場合、CIシステムは静かに失敗します(マージを実行しません)。システムが通知を送信するほうがはるかに優れていたので、開発チームはマージが失敗したことを知ることができました。
ブランチを自動的にマージするCIシステムについて聞いたことがありません。どうして?必ずしもそれほど簡単ではないため、入手可能な最も洗練されたDVCSの1つを使用している場合でも、変更されたコードを人間が確認する必要がある可能性があります。同じファイル(つまり、クラス内の同じメソッド、同じ関数)のビットを実際に変更した場合は、特に注意が必要です。
自動マージは良いことよりも害が大きいと思います。そして結局、あなた(開発者として)は、実際の問題ではない問題を調査することに時間を無駄にしたくありません。そして、コードの一部があなたほど賢くなくて、できなかったという事実だけが原因で起こりました。マージ後のコードがどのようになるかを理解します。
マージは常に手動で行う必要があります。ソフトウェアを設計し、ある程度の健全性をもって開発を管理する場合、非常にまれなケースでのみ競合が発生しますが、競合が発生した場合は、マージされた結果が適切であることを確認するために人間が必要です。
継続的インテグレーションの利点を得るには、開発者は変更をマージし、頻繁に(1時間ごとなど)中央のリポジトリ/ブランチに作業をチェックする必要があります。