我正在为大型企业服务基础架构创建构建和部署基础架构。我们将 TFS Build 2012 用于构建服务器,使用 Visual Studio 2012 生成 WPP 部署包,并使用 MSDeploy 2.1 执行实际部署。(我们不能使用 MSDeploy 3,因为它存在许多错误 - NTLM 身份验证被 WMSvc 破坏等)。
我创建了一个“Project.wpp.targets”文件并添加了以下属性:
<DeployOnBuild Condition="$(DeployOnBuild) == '' And '$(OutDir)' != '$(OutputPath)' ">true</DeployOnBuild>
<WebPublishMethod>Package</WebPublishMethod>
<DeployManagedPipelineMode>Integrated</DeployManagedPipelineMode>
<Disable_CopyWebApplication>True</Disable_CopyWebApplication>
当编译发生在构建服务器上时,OutDir 将不同于 OutputPath 并且 WPP 将被激活。构建输出以下文件:
Project.zip
Project.SetParameters.xml
Project.SourceManifest.xml
Project.deploy.cmd
Project.deploy-readme.txt
里面的 project.zip 是:
Archive.xml
Parameters.xml
systemInfo.xml
问题 1 - SourceManifest.xml 文件是做什么用的,为什么它不在 zip 包中?似乎创建用于部署的 zip 文件包的全部原因是它完全自包含。那个 SourceManifest 文件是“松散的”——我们不能再把一个 zip 文件扔到我们的部署文件共享上。为什么不在包裹里?它还指向构建服务器上的特定路径!
问题 2 - Archive.xml 文件的用途是什么?SourceManifest.xml 似乎有些多余 - 我看到一个提供程序,许多提供程序等。在 Microsoft 文档中,他们在包中提到了“manifest.xml”。这个文件看起来像清单,但它被称为“archive.xml”。文件名重要吗?manifest.xml 与archive.xml 不同吗?它们与 SourceManifest.xml 有什么关系,它看起来相似但同时又不同?
问题 3 - systemInfo.xml 的用途是什么?它似乎列出了在构建服务器上为 IIS 角色安装的所有组件。例如,如果我在本地机器上的命令行运行构建,它会列出已安装的 .NET 2.0 和 4.0 以及我机器上各种 IIS 组件的一些 True/False 值。问题是这些设置与我实际想要部署的内容无关!MSDeploy 是否查看过此文件?可以禁用它的生成吗?我绝对不希望来自构建服务器的配置工件影响生产!