我们目前有4种不同的环境(Lab,Test,Stage,LIVE),我们使用Nant / CC.Net实现了自动部署。我正在调查并研究使用新的MSDeploy工具可以更有效地完成哪些工作。
我想要实现的是创建一个包含Configuration文件夹的包,在该文件夹中我们将拥有所有可能环境的所有不同配置文件(基本上添加所有配置转换文件)
我想要实现的是在我们的企业环境中自动部署,其中开发团队无法访问将要部署的服务器。我们只需要使用预定义的指令移交部署包,以了解如何安装软件包。
你能想到的最佳方法是什么。我们不使用TFS,并且不希望自动构建过程依赖于任何过程,除了MSDeploy或易于替换的东西。考虑使用MSBuild。
答案 0 :(得分:8)
您可以使用以下解决方案来实现它。在这两者之间,我得到了我读过的最好的书之一的指导。本书是由Sayed Ibrahim Hashimi和William Bartholomew编写的“Microsoft Build Engine内部”。本书以精彩的方式完成细节。
创建一个msbuild proj文件,如下所示
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="TransformAll">
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<DestDirectory>C:\Temp\DeployPackage\TRANSFORM_CONFIGS\</DestDirectory>
</PropertyGroup>
<ItemGroup>
<TransformFiles Include="$(FilesToTransform)"/>
</ItemGroup>
<Target Name="TransformAll" DependsOnTargets="ValidateSettings">
<MakeDir Directories="$(DestDirectory)"/>
<TransformXml Source="..\web.config"
Transform="%(TransformFiles.Identity)"
Destination="@(TransformFiles->'$(DestDirectory)%(Filename).transformed.config')" />
</Target>
<Target Name="ValidateSettings">
<Error Text="FilesToTransform cannot be empty"
Condition=" '$(FilesToTransform)'=='' "/>
<Error Text="Couldn't find transform file at [%(TransformFiles.Fullpath)]"
Condition =" !Exists('%(TransformFiles.Fullpath)') "/>
</Target>
</Project>
添加上述proj文件并在文件夹中添加环境特定文件后,只需通过msbuild可访问命令行运行以下命令行
msbuild transform.proj /t:TransformAll /p:FilesToTransform="Lab.config;Test.config;Live.config"
希望这会有所帮助。不要忘记购买/参考“Inside Microsoft Microsoft Build Engine”一书。
答案 1 :(得分:0)
一种可能性是自定义安装程序,以便显示的第一个对话框允许用户选择要安装的环境。根据该决定,相应的文件将被复制到安装目录并重命名。
答案 2 :(得分:0)
我不是100%肯定你在寻找什么。
您是否希望拥有一个根配置文件,该文件是从包含所有环境特定设置的“主”文件更新的?你应该看一下XmlPreProcessor http://xmlpreprocess.sourceforge.net/
除了Pedro的评论之外,您还可以在所有服务器上放置一个注册表项,说明服务器所属的环境。如果执行完全脚本化部署,则程序包将从该注册表项中获取环境,并为该环境生成正确的配置。拯救人类选择环境的步骤。