1

オンプレミスで TFS 2013 を使用しています。ビルド マシンで 4 つのビルド エージェントを構成しています。いくつかのビルド定義は、ASP .NET Web サイトをコンパイルします。Rackspace にある統合サーバーに IIS アプリケーションをデプロイするように msbuild パラメーターを構成しました。

デフォルトでは、webdeploy はファイルの日付を比較することで差分デプロイを行います。私の場合、ネットワークから Rackspace へのファイルのコピーにはかなりの時間がかかるため、これは大きな利点です。ここで、ファイルの日付を保持するために、ビルド エージェントはソース コードの同じ基本セットをコンパイルする必要があります。すべてのビルドで、差分ソース コードのみが新しい DLL を生成し、展開されるファイルの数を最小限に抑えます。

これらはすべて正常に機能しますが、注意点があります。特定のビルド定義を (エージェント名またはタグによって) ビルド エージェントに割り当てる必要があります。問題は、同じエージェントに割り当てられたすべてのビルドがキューに入れられると、不測の事態が発生することです。前のビルドが完了するまで、列に並んで待機します。

理想的な世界では、すべてのエージェントがすべてのビルドを処理できる必要がありますが、エージェントに関係なく、コンパイルされるソース コードは同じでなければなりません。

すべてのエージェントの作業フォルダーが同じ場所を指すように変更しようとしましたが、2 つのエージェントを同じフォルダーにマップできないため、エラーが発生します。エージェントごとに 1 つのワークスペースがあると思います。

何か案は?

4

2 に答える 2

2

最後に、これを行う方法を見つけました。必要な変更はすべて次のとおりです。

  • デフォルトでは、各エージェントの作業フォルダーは $(SystemDrive)\Builds\$(BuildAgentId)\$(BuildDefinitionPath) です。つまり、BuildAgentId ごとに 1 つの作業フォルダーがあります。すべてのエージェントが同じフォルダーを共有するように変更しました: $(SystemDrive)\Builds\WorkingFolder\$(BuildDefinitionPath)
  • デフォルトでは、ワークフローは実行時に「[BuildDefinitionId] [AgentId] [MachineName]」のようなワークスペースを作成します。すべてのエージェントが同じ作業フォルダーを共有しているため、個別のワークスペースを作成しようとするとエラーが発生します。これに対する解決策はビルド定義にあります。xaml を編集し、"Get sources from Team Foundation Version Control" というアクティビティを探します。WrokspaceName というプロパティがあります。ビルド定義ごとに 1 つのワークスペースが必要なので、そのプロパティを BuildDetail.BuildDefinition.Name に設定します。
  • カスタマイズしたビルド テンプレートを保存し、それを使用するビルドを作成します。
  • オプション「1. TF VersionControl/1. Clean workspace」が False に設定されていることを確認します。そうしないと、ビルドはすべてのビルドですべてのソース コードを消去します。
  • オプション「2.ビルド/3.クリーンビルド」がfalseに設定されていることを確認してください。そうしないと、ビルドはすべてのビルドで出力バイナリを消去します。

このセットアップでは、任意のエージェントで同じビルドをキューに入れることができ、それらはすべて同じソース コードとビン出力を指します。ソース コードが変更されると、影響を受けるバイナリのみが再コンパイルされます。msdeploy.exe を使用して、出力ファイルを IIS と Web ファーム内のすべてのサーバーに展開するテンプレートのカスタム ステップがあります。ビルド中に変更された dll またはコンテンツのみがサーバーに同期されるため、ビルドとデプロイに 1 ~ 2 分かかります。

于 2013-12-18T03:14:36.753 に答える