具体的には、DVCSとビルドシステムを統合するツールに取り組んでいますが、「メタ」ツール(コンパイラ、VCS、ビルドシステム、テストランナーなど)を開発する人が直面する課題をイメージしています。 "dogfooding" を通じて開発したい。
私の質問は:分岐ワークフロー を使用したスクラムスタイルのリリースプロセスで、どの時点で新しいものを使い始めますかツールの開発サイクルにおけるツールのバージョン?
次のバランスをとるプロセスを探しています。
ツールのdevelop
バージョンを常に使用します。変更が組み込まれるにつれて、自分の開発を中断していることに気付きます。
ツールのmaster
バージョンを常に使用してください。dogfoodingで発見した問題は、すでにリリースされている問題です。
最初に行うことは、非常に徹底的な自動オフライン回帰テストを行うことです。これらのテストに合格することを、公式に使用するものの最小要件にします。
次に、自動テストで検出できない問題については、以前の作業バージョンにフォールバックするための非常に簡単な方法が必要です。
たとえば、私のLinuxカーネルはしばらくの間カスタムパッチが適用されていました。使用する予定の同じコンピューターでカーネルにパッチを適用してコンパイルします。つまり、障害のあるカーネルを作成すると、開発環境が失われる可能性があります。そのため、GRUBメニューに常に正常なカーネルを保持するようにしたので、間違えた場合は、再起動するだけで良好な開発環境に戻りました。
それをチームと調整するのは難しいですが、ほとんどの場合、誰でもフォールバックを開始して理由を伝えることができるようにすることが問題だと思います。バージョン管理では、それを指定する1つの方法は、ワークフローのdevelop
とmaster
の間のどこかにあるlast_known_good
ブランチのようなものです。ビルドのドッグフードに成功するまで、何もプッシュされません。
このツールを本番品質のソフトウェアの作成に使用している場合(特に、再帰的に使用している場合、つまりそれ自体を開発している場合)、事前のテスト作業を増やし、リリースが十分に安定するまでドッグフードを待ちます。それを使用することによって本番コードを壊すことはないだろうとかなり確信しています。
マスターバージョンがそのレベルの信頼性を持つのを待つ必要がある場合は、そうしてください。
Gitもそのようなツールであり、明らかにドッグフードも行います。しかし、それはさまざまな環境でさまざまな程度にそれを行います。パブリックサーバーはリリースのみを実行していますが、開発者は通常next
(gitプロジェクトの「develop」の名前)またはpu
(開発よりもさらに開発)のいずれかで作業します。何らかの問題によってブロックされた開発者は、何かによってブロックされ、メインリポジトリが影響を受けない場合はいつでも、next
またはmaster
または最後のリリースに戻ることができるため、以下を参照して問題を解決できます。それ。
分岐モデルは上記と似ていますが、名前が少し異なります。 master
は大きなリリースが行われる場所であり、maint
は次のポイントリリースのリリースブランチです。next
は開発に似ていますが、機能が後でマスターに個別にマージされる可能性があるというわずかな違いがあります。次全体がマージされるのではなく、すでに次の中にあります。
追加のブランチpu
があります。これは、統合が検討されているすべての機能ブランチをnext
にマージすることによって作成されます(ブランチは破棄され、毎回再作成されます)。 IIRCは、テストスイートに合格した場合にのみ公開されます。最後に、メンテナのJunioがスクリプトを実行して定期的に手動でビルドしているのを見ましたが、そのようなスクリプトは毎晩継続的インテグレーションによって実行でき、 Gerrit でも自動的に作成されると思います。
そういうことが答えです。開発環境で使用しているほとんどの開発バージョンをドッグフードしますが、リリースのビルドには以前のリリースを使用します。
受け入れられた回答 に基づいて、 ブランチワークフロー を拡張して、次のようなブランチを維持します。
master
:終了時にrelease-*
とマージしますdogfood
:master
からの分岐;ドッグフード中に特定された修正が含まれます。ソフトウェアが内部使用に対して「安定している」と見なされた場合、develop
からマージします。このブランチのヘッドは、必要に応じて時間を遡ることができますdevelop
:master
からの分岐;進行中の変更、バグ修正、およびdogfood
およびfeature-*
ブランチからのマージが含まれますfeature-*
:develop
からの分岐;特定の新機能の変更が含まれますrelease-*
:ソフトウェアが外部使用のために「安定している」と見なされる場合、dogfood
から分岐します。 master
とマージする前の、ドキュメントの更新とマイナーなバグ修正が含まれています