簡體   English   中英

TFS 2017 構建定義:打包 Web API 項目以進行部署

[英]TFS 2017 Build Definition: Packaging Web API Project for deployment

我有一個包含四個項目的 Visual Studio 解決方案:

1個桌面應用程序; 1個視窗服務; 2 Web API 項目。

這些項目已從 VS2010 -> 2013 -> 2017 遷移。我已經刪除/編輯了我所認識的盡可能多的遺留內容。

該解決方案在 2017 年構建良好。

我希望只構建一個 Web API 項目,生成一個部署包,並將該包作為工件發布。 發布定義將使用 WinRM 在運行 IIS 的 Windows Server 2012 系統上部署包。

在我的構建定義中,我有一個 MSBuild 任務。

該任務的參數如下:

  1. 項目設置為我的 webAPI .csproj 在 TFS 源代碼控制中的路徑
  2. 平台設置為“AnyCPU”-(“Any CPU”不起作用......這是一個已知(舊)問題)
  3. 配置是“發布”
  4. MSBuild 參數是:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.ArtifactStagingDirectory)\\webapi.zip

  1. 清潔設置為真

構建成功完成,但是生成的 webapi.zip 包包含大量文件夾結構:

C:\\agent2_work\\27\\a\\webapi.zip\\Content\\C_C\\agent2_work\\27\\s\\MyProduct.WebApi\\obj\\release\\Package\\PackageTmp

問題:

  1. 為什么要打包這個完整的路徑? (c:\\agent2_work 是我的構建代理目錄)
  2. 我該如何更改?

這是預期的行為,它基於您的Package Location 如果你在VS中發布項目,你會發現類似的文件夾結構。 有關詳細信息,請參閱在 Visual Studio 中創建 Web 部署包 這個線程供您參考。

但是,您可以使用 MSBuild 參數中使用的發布配置文件更改文件夾結構。 請按照以下步驟執行此操作:

1、創建發布配置文件。

要在 VS 中創建 Web 部署包,您首先要為此創建一個發布配置文件。 執行此操作時,將在Properties\\PublishProfiles下為您創建一個.pubxml文件。 這是您的發布配置文件,它是一個 MSBuild 文件。 您可以通過編輯此文件來自定義發布過程。 我們將修改此文件以更新包中的這些路徑。

2、編輯.pubxml文件的.pubxml文件並在結束</Project>標記之前添加以下內容 (創建目標AddReplaceRuleForAppPath ,並通過將其添加到PackageDependsOn屬性將其注入包進程。執行此目標后,它將向 MSDeployReplaceRules 項組中添加替換規則。)

<PropertyGroup>
  <PackagePath Condition=" '$(PackagePath)'=='' ">WebApi</PackagePath>
  <EnableAddReplaceToUpdatePacakgePath Condition=" '$(EnableAddReplaceToUpdatePacakgePath)'=='' ">true</EnableAddReplaceToUpdatePacakgePath>
  <PackageDependsOn>
    $(PackageDependsOn);
    AddReplaceRuleForAppPath;
    </PackageDependsOn>
</PropertyGroup>

<Target Name="AddReplaceRuleForAppPath" Condition=" '$(EnableAddReplaceToUpdatePacakgePath)'=='true' ">
  <PropertyGroup>
    <_PkgPathFull>$([System.IO.Path]::GetFullPath($(WPPAllFilesInSingleFolder)))</_PkgPathFull>
  </PropertyGroup>

  <!-- escape the text into a regex -->
  <EscapeTextForRegularExpressions Text="$(_PkgPathFull)">
    <Output TaskParameter="Result" PropertyName="_PkgPathRegex" />
  </EscapeTextForRegularExpressions>

  <!-- add the replace rule to update the path -->
  <ItemGroup>
    <MsDeployReplaceRules Include="replaceFullPath">
      <Match>$(_PkgPathRegex)</Match>
      <Replace>$(PackagePath)</Replace>
    </MsDeployReplaceRules>
  </ItemGroup>
</Target>

3、保存發布配置文件並簽入更改

4、在下面的 MSBuild 參數中輸入:(在這個例子中我的發布配置文件名稱是1011DP.pubxml

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:PublishProfile=1011DP /p:SkipInvalidConfigurations=true /p:PackageLocation=$(Build.ArtifactStagingDirectory)  

5、運行構建,然后檢查文件夾結構。

在此處輸入圖片說明

為了讓事情更容易一些,我剛剛創建了一個 nuget 包,它會自動為您執行這些步驟。 請參閱https://www.nuget.org/packages/SharpSvn.ShortMSDeployWebContentPath

只需在 Visual Studio 的 Web 應用程序項目中安裝它,就會更改“Contents”下方的長路徑,僅包含一個單詞“web”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM