16

1 つの webapp プロジェクトといくつかの付随するプロジェクトを含む単一のソリューションがあります。私たちの TFS 2010 は毎晩このソリューションを構築しており、Web アプリケーションを IIS サーバーに展開しています。それはそよ風のように実行されます。

TFS ビルド定義の [プロセス] タブで、「MSBuild 引数」を指定できます。これは、ビルド定義で設定されている値です (すべて 1 行で)。

/p:DeployOnBuild=True 
/p:DeployTarget=MsDeployPublish 
/p:CreatePackageOnPublish=True 
/p:MSDeployPublishMethod=WMSVC
/p:MSDeployServiceUrl=<service url of IIS> 
/p:DeployIisAppPath="<a website>" 
/p:UserName=<domain>\<user 
/p:Password=<password> 

このブログ投稿では、セットアップ全体について説明しています: http://vishaljoshi.blogspot.com/2010/11/team-build-web-deployment-web-deploy-vs.html

ここまでは順調ですね。

これで、毎晩同じ IIS にもデプロイする 2 番目の webapp プロジェクトを追加しました。残念ながら、この場合、セットアップは適用されません。TFS は 1 つの Web アプリケーションのみをデプロイします。

同じ問題を抱えている人が他にもいます:

ソリューションに複数の Web アプリケーションがある場合の TFS 2010 + MSDeploy

複数の Web サイトを展開するための WebDeploy

Vishal R. Joshi は、各 webapp プロジェクトにいくつかのプロパティを追加することを提案しています。リリース ビルドは、次のプロパティが定義されている各 webapp プロジェクトの webpackage (zip ファイル) を生成します。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DeployOnBuild>True</DeployOnBuild>
    <DeployTarget>Package</DeployTarget>
    <CreatePackageOnPublish>true</CreatePackageOnPublish>
</PropertyGroup>

Ok。しかし、TFS をどのようにして各 Web アプリケーションを IIS にデプロイするのでしょうか? 他のアイデアはありますか?

4

4 に答える 4

13

あなたがリンクしたブログ記事で Vishal が説明しているように、すべての MSBuild パラメーターは csproj 内に移動できます。これは、各プロジェクトが独自の設定を持つことができることを意味します。

6 つのプロジェクト、4 つのクラス ライブラリ、および 2 つの Web (WCF および MVC アプリ) を含む単一のソリューションがあります。私は Vishal のブログの指示に従い、すべての MSBuild パラメーターを各 csproj ファイルに移動しました。

  <PropertyGroup>
    <DeployOnBuild>True</DeployOnBuild>
    <DeployTarget>MsDeployPublish</DeployTarget>
    <CreatePackageOnPublish>True</CreatePackageOnPublish>
    <MSDeployPublishMethod>InProc</MSDeployPublishMethod>
    <MSDeployServiceUrl>localhost</MSDeployServiceUrl>
    <DeployIisAppPath>Dev.Auzzy\Web</DeployIisAppPath>
    <UserName>Username</UserName>
    <Password>Password</Password> 
    ...

次に、ビルド定義からパラメーターを削除してください。

その後、TFS は期待どおりに展開します。各プロジェクトは、各 IIS サイトのホーム ディレクトリとして指定された正しいフォルダーに配置されます。

また、上記のように DeployIisAppPath を PropertyGroup に含めることはできませんが、プロジェクトのプロパティ ページを使用してビルド構成ごとにこれを指定することもできます。(各プロジェクトを右クリックし、[プロパティ] > [Web をパッケージ化/公開] をクリックします)。

于 2011-08-01T23:07:47.940 に答える
1

TFSBuild.proj ビルド ファイルがあり、ビルドの最後にいくつかのインストーラーとパッケージを生成し、各展開環境 (開発、テスト、ステージング、および運用) を対象とする同様の状況があります。@Matt Shepherd の回答で定義されたプロパティは、個々のプロジェクト ファイルに書き込む代わりに、 MSBuildタスクに直接提供することもできます。

<!-- After build -->
<Target Name="AfterCompileSolution">

  <!-- Create SynchWorkflow deployment packages -->
  <CallTarget Targets="PackageSynchWorkflow" />

</Target>

<!-- Build deployment package for each target environment -->
<ItemGroup>
  <BuildMode Include="Development"/>
  <BuildMode Include="Test"/>
  <BuildMode Include="Staging"/>
  <BuildMode Include="Production"/>
</ItemGroup>
<PropertyGroup>
  <PackageLocation>$(OutDir)</PackageLocation>
</PropertyGroup>

<Target Name="PackageSynchWorkflow" Outputs="%(BuildMode.Identity)">
  <Message Text="Building %(BuildMode.Identity)"/>

  <MSBuild Projects="$(SolutionRoot)\SynchWorkflow\SynchWorkflow.csproj"
           Properties="Platform=Any CPU;
                       Configuration=%(BuildMode.Identity);
                       DeployOnBuild=true;
                       DeployTarget=Package;
                       DeployIisAppPath=Default Web Site/SynchWorkflow;
                       OutputPath=$(PackageLocation)\SynchWorkflow.%(BuildMode.Identity)Package;"/>
</Target>

この場合、DeployIisAppPathを指定することができ、その値は展開パッケージ パラメーター ファイルに書き込まれます。

于 2012-02-13T22:00:39.893 に答える
0

1 つのオプションは、これを MSBuild タスクに書き込むことです。このようにして、複数の IE 無制限 Web アプリケーションの展開をサポートできます。これを行う既存の proj ファイルをまだ移植していないため、この問題に遭遇していません。とにかく、ここにそのプロセスを概説する記事があります:

論文

それが役立つことを願っています

于 2011-06-24T19:26:44.607 に答える