我正在通过服务器上的自动构建触发器创建Web部署包。 该软件包应该在任何所需的服务器上处理所有事情(包括创建特定网站,apppool和最新代码)。
我从配置的本地IIS站点手动提取了一个部署包,其中包含MsDeploy创建站点,apppool等所需的所有信息...... 它们出现在以下文件中
archive.xml
parameters.xml
systeminfo.xml
现在的想法是,我将在构建服务器上创建一个自动部署包,其中包含新编译的代码,但是包含.zip包中的上述xml文件。
现在,我正在构建应用程序,之后我执行一个PowerShell脚本,该脚本将手动使用我拥有的文件覆盖.zip中的文件。
但是,我知道你可以扩展目标文件(在你的项目中使用.wpp.targets文件)来插入管道并修改一路上的东西。 不幸的是,我发现我得到的信息有点迷失。
我想:
1)配置部署包的创建以使用我现有的.xml文件。
2)如果不可能,请在创建包后用自己的文件覆盖文件。
我的目标是在构建完成后拥有一个完整的可执行部署包,因此我不再需要PowerShell脚本了。
任何能够让我更接近解决方案或帮助我更清楚地了解msbuild目标和/或webdeploy的信息都非常感激。
答案 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中的文件。