创建部署包后修改文件

时间:2013-06-14 12:52:29

标签: msbuild msdeploy

我正在通过服务器上的自动构建触发器创建Web部署包。 该软件包应该在任何所需的服务器上处理所有事情(包括创建特定网站,apppool和最新代码)。

我从配置的本地IIS站点手动提取了一个部署包,其中包含MsDeploy创建站点,apppool等所需的所有信息...... 它们出现在以下文件中

archive.xml
parameters.xml
systeminfo.xml

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

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

但是,我知道你可以扩展目标文件(在你的项目中使用.wpp.targets文件)来插入管道并修改一路上的东西。 不幸的是,我发现我得到的信息有点迷失。

我想:

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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