Joel Test の基準の1つは、毎日のビルドです。考えは、ビルドが壊れた場合、壊れた人はだれでもそれを修正するために周りにいるということです。ビルドを修正できない場合、全員が古いバージョンをチェックアウトして、それに取り組む必要があります。マージとブランチをできるだけ避けることが重要である集中バージョン管理では、これがどのように非常に悪いのか理解できますが、これは分散バージョン管理のマイナーな邪魔に聞こえるだけです。これに同意しますか?毎日のビルドが重要である他の理由はありますか?
ここで注意すべき重要なことは、regularがヘルプを構築することです後でエラーをキャッチするのは早くなります。それは毎日持っているわけではありませんが、しばしば十分です。理想的には、単体テストも実行できます。
目標は、ビルドが最終テストフェーズの前にいつ中断するかを調べ、できるだけ早くそれらを見つけることです。
メインの開発ブランチを構築するように設定するだけです。
私たちは仕事でそれを使用します(ただし、1時間ごとにビルドします)。多くの場合、セットアップを忘れると、リリースの数時間前に問題が見つかります。
これ(および@GoodEnoughs)に少し追加する必要があります。
しかし、これは分散バージョン管理にとってはちょっと厄介なことのように思えます。
はっきり言って、「サーバー」ビルドは、トランクがクリーンからビルドしてテストに合格することを伝えます(環境に必要な構成の量は少なくなります)。
私はDVCSへの切り替えを検討していますが、そうしたとしても、私の継続的な統合を私の冷たい死んだ手から引きずることになります。
簡単な例を挙げましょう。開発中の機能「a」と開発中の機能「b」は、ある時点で分散させるか、すべてまとめる必要があります。コミットするときに、アプリが構築するファイルを追加するのを忘れた場合あなたのマシンではそれは他のどこにもありません。したがって、ビルドを「トランク」にプッシュすると、継続的インテグレーションがトリガーされ、ビルドが失敗します。beforeを知って、うまくいけば、誰かがあなたを引っ張らないでください非常に完全なコードなので、手順を実行できます。
複数の開発者がいるプロジェクトで作業している場合、リリースバージョンがどこから来るのか(トランクが有効)を定義できなければなりません。これは、バージョン管理の動作に関係なく当てはまります。
機能(特に他の人が依存している機能)を追加した場合、それが「ライブ」にプッシュされたときに、開発環境以外の場所でテストが構築されてパスすることを確信できるようにするため。それ以上に、私は自分のビルドサーバーからのビルドからデプロイします。これは、「決定的な」ビルドを指定する方法のようなものです。最終的に、ユーザーがトリガーするデプロイメントビルドを作成します。あなたがそれを丸くすることができるというのは良いことではありません-あなたがそれを必要とするならできません(そして私はhaveオフィスで見つけた丸い開発ボックスをスクランブルしました不足しているファイルをコミットします)。
それは少し強いですか?わからない-しかし、私のビルドサーバーは、私が返したくなかったものの1つです。
私が信じている毎日のビルドは非常に重要です。異なるタイムゾーンに分散しているチームがある場合、ほとんどのチームにとっておおよそ「1日の終わり」である時間を見つけるのが最善です。さらに、毎日のビルドに自動テストコンポーネントがある場合は、より望ましいです。
中央のソース管理システムの時代には、ソースコードで何かが変更されたときに5〜10分ごとに実行される継続的なビルドを推奨します。コンパイルエラーはチームのほとんどを遅くする可能性があるので。分散ソース管理システムを実行している組織では、開発者が「手付かずの」コードベースに直接触れる頻度が減るため、継続的なビルドはそれほど必要ない場合があります。
毎日のビルドは大丈夫です。正直に言うと、ジョエルのテストは最近少し古くなっていると思います。
私の意見では、1日を通して継続的にビルドし、ユニット、システム、機能レベルのテストケースを実行し、理想的には、環境のようなステージにパッケージングしてデプロイすると同時に、DBと環境のバージョン管理メカニズムを導入していることを確認する必要があります。期待どおりに動作しています。
ビルドまたは展開時間が長すぎる場合は、物理またはソフトウェアのRAMディスク、高速インターネット接続、ビルドの並列化などでこれらの問題のいくつかを最適化することを検討してください。 。
毎日のビルドは重要ではありません。毎日のビルドそれは常に成功しますです(または1時間だけ壊れているビルド)。ビルドが壊れたときにCIが70%あることはあまり役に立ちません。なぜなら、ほとんどが壊れている場合は、エラーの特定に役立たないためです。
ステージングサーバーへのビルド、テスト、展開は毎日行う必要があると思います。
「毎日のビルド」の背後にある考え方は、テスターやプロジェクトマネージャーが実行できる何かを常に準備して、誰もがプロジェクトの実際の状態を把握できるようにすることです。
これまでは、「日次ビルド」後のデスクトップアプリでは、テスターまたはプロジェクトマネージャーがすぐにアプリを実行できるため、デプロイ手順について言及する必要はありませんでした。
理想的には、ビルドに半日以上かかる大規模なものをビルドしない限り、1日に複数回ビルドすることになります。 Hudson や TeamCity などの継続的インテグレーションサーバーをセットアップすると、通常は1時間ごとまたはコミットごとにビルドが自動的に行われます。問題がある場合は通知されます。
これは、特にビルドの一部として自動テストも実行している場合に、エラーを早期に検出するのに適した方法です。これは、ビルドが1つの開発者のマシンで機能し、リポジトリまたは環境から何かが省略されたために他の場所では機能しない構成エラーを見つけるのに特に役立ちます。
さらに高度な継続的インテグレーションサーバーでは、時間の経過に伴うメトリック(コードカバレッジパーセンテージ、ビルド時間、コード行など)を追跡することもできます。