典型的なソリューションは、ビルドサーバーでCI(継続的インテグレーション)ビルドを実行することです。これは、ソースコードの分析、ビルド(デバッグ中)の作成、テストの実行、テストカバレッジの測定などを行います。
現在、通常知られている別のビルドタイプは「ナイトリービルド」です。コードドキュメントの作成、セットアップパッケージの作成、テスト環境へのデプロイ、テスト環境に対する自動(スモークまたは受け入れ)テストの実行など、低速な処理を実行します。
さて、質問:
あなたの会社では何を使っていますか?
(リリースビルドでは、潜在的な製品バージョンのソース管理に何らかのタグを追加する必要もあります。)
リリースビルドをナイトリービルドと同じにする場合は、次のようになります。リリースしたものとまったく同じものをテストしたい。開発テストですでに検出されている可能性がある本番環境のバグを発見したくありません。
リリースビルドとナイトリービルドの違い:
これらの違いは、実際には、私が知っているほとんどのビルド管理システムのいくつかの追加オプションです。人為的エラーの可能性を最小限に抑えるために、これらを保存することができます。必要なパラメーターのみを受け取る(そしてそれらを検証する)バッチ/スクリプトファイル内。
さて、私はリリースビルドを可能な限り毎晩処理するようにしたいと思います!理想的にはまったく同じですがタグが付いています。
問題は、リリースビルドとナイトリーが同じでない場合、何が異なっていても問題を隠してしまう可能性がある(または1つ下の追跡をより困難にする)ことです。
私は1つのビルドプロセスで、CIサービスによって実行されるすべてのチェックインをすべてビルドします。これは、デバッグビルドとリリースビルドの両方です。
2つまたは3つの別々のプロセスを持つことは、文書化されることなくランダムに変更を開始するように彼らに要求するだけであり、誰かが潜在的なリリースごとに15のステップを実行しなくてはならないことに気付くのに時間がかかりません。
私がやりたいことの1つは、ナイトリービルドをデバッグモードではなくリリースモードにすることです。 System.Diagnostics.Debugを置き換えるlog4netなどのロギングフレームワークでは、リリースモードとデバッグモードの主な違いは、オブジェクトのライフタイムとコードの最適化です。
あなたが実際にあなたのナイトリービルドにデバッガーをアタッチするつもりでない限り、私もこれを行うことをお勧めします。
私たちが従うプロセスは、毎晩のビルドが毎晩実行され、それが機能する場合は、同じビルドを他のサーバーにデプロイできます(再ビルドなしで、パッケージインストーラーを取得して実行するだけです)。ナイトリービルドに問題がある場合は、ブランチでその変更をチェックインし、日中にブランチから「ナイトリー」ビルドを実行します。その後、テストを再実行できます。