3

我正在通过服务器上的自动构建触发器创建 Web 部署包。该软件包应负责所需的任何服务器上的所有内容(包括创建特定网站、应用程序池和最新代码)。

我从配置的本地 IIS 站点手动提取了一个部署包,其中包含 MsDeploy 创建站点、应用程序池等所需的所有信息......它们存在于以下文件中

archive.xml
parameters.xml
systeminfo.xml

现在的想法是,我将在构建服务器上自动创建一个部署包,其中包含新编译的代码,但在 .zip 包中包含上述 xml 文件。

现在,我正在构建应用程序,然后执行一个 PowerShell 脚本,该脚本将使用我拥有的文件手动覆盖 .zip 中的文件。

但是,我知道您可以扩展目标文件(在您的项目中使用 .wpp.targets 文件)以插入管道并在此过程中进行修改。不幸的是,我对找到的信息有点迷失了。

我想:

1) 配置部署包的创建以使用我现有的 .xml 文件。

2)如果不可能,请在创建包后用我自己的文件覆盖文件。

我的目标是在构建完成后拥有一个完整的可执行部署包,因此我不再需要 PowerShell 脚本。

非常感谢任何能让我更接近解决方案或帮助我更清楚地理解 msbuild 目标和/或 webdeploy 的信息。

4

2 回答 2

1

我通过扩展 Package MsBuild 目标来做到这一点。

在 Web 项目的根目录中添加一个 .wpp.targets 文件,其中包含以下内容。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\MSBuild.ExtensionPack.4.0\MSBuild.ExtensionPack.tasks"/>

  <PropertyGroup>
    <DeployFilesDirectory>$(MSBuildProjectDirectory)\Deploy\</DeployFilesDirectory>
  </PropertyGroup>

  <PropertyGroup>
    <OnAfterPackageUsingManifest>
      $(OnAfterPackageUsingManifest);
      CopyDeployFiles;
      ReplaceSetParametersFile;
      <!--ZipDeploymentFiles;-->
    </OnAfterPackageUsingManifest>
  </PropertyGroup>

  <Target Name="CopyDeployFiles">
    <Message Text="Copy Deploy Files"></Message>

    <ItemGroup>
      <Files Include="$(DeployFilesDirectory)*.xml" Exclude="$(DeployFilesDirectory)setParameters.xml"></Files>
    </ItemGroup>

    <MSBuild.ExtensionPack.Compression.Zip TaskAction="AddFiles"
                                           CompressFiles="@(Files)"
                                           ZipFileName="$(PackageFileName)"
                                           RemoveRoot="$(DeployFilesDirectory)"/>
  </Target>

  <Target Name="ReplaceSetParametersFile" DependsOnTargets="GenerateSampleDeployScript">
    <Message Text="Replace Default SetParameters File"></Message>
    <Copy DestinationFiles="$(GenerateSampleParametersValueLocationDefault)"
          SourceFiles="$(DeployFilesDirectory)setParameters.xml"></Copy>
  </Target>

</Project>

第一个目标在 MsDeploy 创建包后执行,并将替换 .zip 文件中的 .xml 文件。我正在使用MsBuild.ExtensionPack Zip 支持。

第二个目标在构建创建示例 .cmd 和 setParameters 文件后执行,并且也会用我自己的覆盖 setParameters.xml。

理解 MsBuild 目标等的概念需要一些时间,但是一旦你理解了它就会变得非常强大。

现在创建包就像启动 MsBuild 一样简单

msbuild "D:\Projects\MyWebProject.csproj" /T:Package /P:Configuration=Release;Platform="AnyCPU";PackageLocation="D:\DeployPackage\package.zip";PublishProfile=MyProfile

并且部署和以前一样

package.deploy.cmd /Y –setParamFile :myParameterFile.xml
于 2013-07-01T07:53:15.760 回答
0

假设您的路径保持不变,您可以通过将现有zip 指定为您的-dest:package=package.zip. MSDeploy 将自动覆盖 zip 中的文件。

于 2013-06-17T23:03:50.630 回答