web-dev-qa-db-ja.com

Visual Studio Team Services(およびTFS)でビルドを高速化する方法はありますか?

私たちのチームは、ビジュアルスタジオオンラインを使用して継続的な統合を設定しました。私たちは、サブスクリプションをアドバンストに上げ、有料のビルド制限に到達しようとしました。ただし、ビルド時間は非常に遅くなります。

ビルドはキューに数分間置かれ、実行に数分かかります(ソース管理へのNugetパッケージの追加をテストする場合でも)。

Visual Studio Onlineでビルドを高速化する方法はありますか?そうでない場合、いくつかの良い代替案は何ですか?

私は、Azure VM=での独自の継続的統合サーバーの受け入れまたは設定を最悪の場合のフォールバックとして受け入れています。

24
RBZ

ホストされたビルドサーバーにはいくつかの欠陥があります。まず、これらは常に何も保存されていないクリーンなイメージであるため、ソース、パッケージ、および以前にビルドされたバイナリは利用できません。このため、ビルドをさらに高速化する唯一の方法は次のとおりです。

  • 以前の結果をNuGetパッケージの形式で再利用して、ビルドするプロジェクトの数を減らします。これには、ソリューションをより小さなビットに分割し、Visual Studio Team ServicesまたはMyGetなどのサードパーティサービスのパッケージ管理機能を使用する必要があります。
  • ビルドを並列化します。複数のプロジェクトまたは複数の構成を構築している場合は、MultiConfigurationオプションの機能を使用して、複数のエージェントで複数のビルドを起動します(この場合、複数のホストされたエージェントを割り当てる必要があります) enter image description here
  • BuildInParallelを有効にしてMsBuildが複数のインスタンスを起動できるようにし、MaxCpuCount=2を有効にしてホストされたエージェントで利用可能な複数のCPUコアを使用できるようにします。 A3インスタンスで実行されているようで、4つのコアを試すことができます。 BuildInParallelMaxCpuCountの両方を使用している場合は、MaxCpuCountのコア数を最大にしないでください。
  • OutputPathを使用して、すべての出力を単一のディレクトリにビルドします。
  • ビルドタスクのチェックボックスを使用して、並列テストの実行を有効にします。
  • ワークスペースのマッピングをできる限り調整してください。必要のないフォルダをクロークし、本当に必要なものだけをマッピングします。
  • CIビルドに実際に必要ないものはすべてスキップしてください。フィードバックの品質が低下している場合でも、コード分析をオフにして、毎晩のビルドでのみ完全なテストスイートを実行してフィードバック時間を増やすことができます。

これはあなたができる限りのことです。ホストされたプールでより高速なVMをレンタルすることはできません。また、ワークスペースの増分ビルドまたは少なくとも増分更新を可能にするMsBuildの機能を使用することはできません。また、エージェントの初期化時間とソースの取得を削除する方法はありません。

本当にスピードアップするには、独自のビルドサーバーをセットアップする必要があります。 DS Azure VM永続的なSSDで実行すると、パフォーマンスが最大になります。独自のVM次の追加機能を実行できます。

  • クリーンワークスペースをオフにします。これにより、ソース管理の増分フェッチが可能になります。
  • クリーンビルドをオフにします。これにより、MsBuildは増分ビルドを実行できます。
  • 十分なCPUを備えた同じマシンに複数のエージェントをインストールし、同じVMで並列に複数の構成を構築します。
  • クリーンなワークスペースでビルドしたいが、TFVCのソース取得を高速化したい場合は、ローカルに保存されたファイルのビルドエージェントにTFVCプロキシをインストールします(TFS 2013バージョンを使用)。
  • Pre/Postbuildイベントを使用している場合は、それらが入力と出力を指定していることを確認して、MsBuildがターゲットをインクリメンタルビルドでスキップできるかどうかを推定できるようにします。

Azureでエージェントをホストする代わりに、Befy開発者のワークステーションまたは既存のローカルサーバーにローカルビルドエージェントをインストールすることもできます。

MsBuildのパフォーマンスをさらに向上させるために適用できる他のMsBuildのヒントとコツがあります。それはあなたがあなたのビルドをそのように削り取ることができるどのくらいの時間にあなたを驚かせるかもしれません。

37
jessehouwing