$DAYJOB
、次のリリース/配信パイプラインがあります。
このプロセスに関するいくつかのメモ:
develop
のブランチに取り組んでいます。 nextリリースの機能にも取り組んでいます。ただし、リリースがスケジュールされるまで、機能はマージされません。これは、「リリース」ブランチを作成しないためです(これについては後で詳しく説明します)。以下は、バグと機能の両方に対する開発プロセスの流れです。
develop
を分岐して作業を開始します。develop
からではなく):develop
のビルドには、複数の開発者からの複数の機能またはバグ修正が含まれる場合があります。回帰が発生すると、回帰の原因を追跡することがより困難になります。 「test-each-branch」モデルを使用すると、そのブランチの変更に対する回帰(つまり、1つの機能またはバグ修正)を分離できます。develop
にマージしないため、すべての機能をブランチでテストする必要があります。また、QAは導入スケジュールを管理するので、開発者がいつ新機能の準備ができるかを知ることができます。develop
にマージします。最後にソフトウェアをリリースするとき(通常は新しいUATビルド)、develop
からmaster
に直接マージします。
現在のシステムの症状:
release
ブランチを現在使用しない理由は、ブランチでの経験が悪いためです。 UATプロセスには数か月かかることがあります。時には彼らは不当に機能を要求し、上級管理職はそれを許可します。リリースブランチが多数になり、寿命が長くなり、パリティの大きな問題が発生しました(つまり、リリースブランチは存続期間中に大量の変更を蓄積します)。
この全体はかなり混沌としていて、管理するのが難しいです。ただし、リリースは非常に安定しているため、QAにより、このプロセスについて多くの素晴らしいフィードバックが得られます。これは、QAがマージされる前にすべてのブランチに触れるのに対し、開発者が1日中develop
にマージし、QAが変更に対応できなかったため、リリースでは多くのテストが行われなかったためです。
プロセスと状況を説明したので、いくつかの質問:
release
ブランチはどのように処理する必要がありますか?理想的には、develop
でアクティブな開発を継続できるようにしたいafter UATの開始。多くの組織で私が見たよく知られた問題の多く。
私の提案は次のとおりです:
それはコードであり、ワークフローの面でもです。
難しい部分は次のとおりです。
文化を変える
何が間違っているのか、なぜ間違っているのかについては、おそらくさまざまな意見があります。組織の最高(関連)レベルから賛同し、擁護する必要があります。このようなスリム化されたシステムの利点を説明して販売する必要があります。シンプルさと迅速なターンアラウンドを説明してください。 (おそらく)アジャイルプロセスが単なるリップサービスではなく、実際のアジャイルプラクティスと、可能な場合はスクラムマスターから十分に検討されていることを確認してください。
既存のワークフローを変更する新しいワークフローをまとめて、それに移行するための計画を立てる必要があります。
他の考え:
(一部の)変更をマージできるが、管理GUIを介して機能をオン/オフにする包括的な機能切り替えシステムの実装を検討してください。
機能を完成させてQAに渡すのではなく、デリバリーパイプラインで、設計、実装、およびテストにQAを関与させることを検討してください。 QAが実装に驚いたり、開発者がQAのテスト方法に驚いたりしたくはありません。
関係者全員と毎週リリースミーティングを行い、すべてのチケットを通過します。これは簡単に50-100チケットにすることができます。ビジネスへのリリースの影響、リリース前のステップ、リリース後のステップ、ダウンタイムなどについて、それぞれに基づいて触れてください。
私はこの質問が少し古いことを知っていますが、手動qaを通過するまで物事がマージされて開発されなかった同様のフェーズも経験しました。私の経験が同様の問題に直面している誰かを助けることを願っています。
最大の問題は、ブランチが孤立しすぎて、マージして開発しようとしたときにマージ地獄が作成され、その後の機能がまだマージされていない開発前のブランチのコードに依存している場合に、開発者が回避策を見つける必要があることです。 。
そのため、古いブランチをマージするために何時間も無駄に費やした後、開発者が完了したら直接マージして開発することを決定しました。開発で見つかったバグは優先的に修正されます。
開発者がテストするまで何もリリースしないという責任を(正しく)負わせ、QAが「ゲートキーパー権限」を失うことにあまり満足していないため、これは文化的な変化でもあります。
しかし、私たちはしばらくの間、直接マージして開発を続けてきました。
最終的に、howお客様が使用するつもりであるかどうかに関係なく、物理的なリリースごとにリリースブランチを使用することを決定しました。リリースされたビルドが偶然UAT経由で作成されなかった場合、それは問題ありません。別のrelease
ブランチを作成して、再度出荷します。ただし、UATがビルドを受け入れた場合、再度ビルドする機会はありません。その場合、彼らは取得したビルドを保持し、UATとはまったく関係のない次のリリースに進みます。
この点で、すべてのリリースはまったく同じフローとルールに従います。 UATサイクル中に週にいくつかのリリースブランチを作成するのではないかと思いましたが、そうではありません。 QAチームはリリースブランチに十分な時間を費やしており、2週間に1回しか作成していません。
これまでのところ、これはうまく機能しており、非常に扱いやすいです。また、機能のリリースがUATのリリースが完了するまで待機するように強制します。これは素晴らしいことです。より詳細なレベルでリリースを処理できます。