我的团队目前正在尝试自动部署我们的.Net和PHP Web应用程序。我们希望简化部署,并避免由于手动操作而导致的麻烦和许多麻烦。
我们需要一个解决方案,使我们能够:
- Compile the application
- Version the application with the SVN version number
- Backup the existing site
- Deploy to a web farm
我们所有的应用都使用SVN来源控制,我们的.Net应用使用CruiseControl。 我们一直在尝试使用MSBuild和NAnt部署脚本,但成效有限。我们过去也使用过Capistrano,但希望尽可能避免使用Ruby。
是否还有其他可以帮助我们的部署工具?
答案 0 :(得分:32)
谢谢大家的善意建议。我们检查了所有这些,但经过仔细考虑后,我们决定使用CruiseControl,NAnt,MSBuild和MSDeploy的组合来推广自己。
这篇文章有一些很好的信息: Integrating MSBuild with CruiseControl.NET
以下是我们的解决方案的工作原理:
然后,当我们确认所有内容已准备好进入实时/暂存时,我们会运行另一个脚本:
现在进入这个阶段并不是很好,但它现在大部分都像魅力一样:D
在我们对流程进行更改时,我会尝试更新此答案,因为现在似乎有几个类似的问题。
答案 1 :(得分:3)
我已经使用Visual Build Pro多年了,它非常灵活且易于使用,并且内置了许多标准操作(如您提到的那些)。
答案 2 :(得分:3)
我使用Puppet,Makefile来构建RPM,Bamboo为我这样做。我的系统没有直接应用,我不熟悉Windows世界,但有一些可转移的模式。
我的make setup允许我为构成我的应用程序的所有内容(php libs,php网站,perl模块,C app等)构建RPM。这可以手动调用,也可以通过Bamboo调用。我将这些RPM转移到yum repo和puppet句柄中,确保在群集中安装最新(或正确)的软件版本。
你能自动将软件包构建到MSI中吗?我认为Puppet可以在Windows中管理软件包和版本的安装。
答案 3 :(得分:2)
我为此使用msdeploy。它完美无缺。
关于Ant;对于.NET平台,我们有NAnt,您可以将它与MSDeploy结合使用;您可以从Nant脚本中调用MSDeploy。
编辑: 只是为了说清楚;你可以用msdeploy做任何事情。使用Nant不是必需的。
答案 4 :(得分:1)
我们设法将带有UNC地址的-source:dirpath命令用于带有msdeploy的服务器,而不是使用xcopy。关键是ignoreAcls = true并删除msdeploy字符串中对用户名和密码的调用:
msdeploy -verb:sync -source:dirpath=\\build\e$\app -dest:dirpath=\\live\d$\app,ignoreAcls=true
该示例将站点从构建服务器的E驱动器部署到我们的实时服务器上的D驱动器。在实时服务器上公开共享或此级别的磁盘访问有一些安全注意事项。我们目前正在考虑使用受限访问共享文件夹。
然后,我们将此输出通过管道传输到日志文件,然后将其移动到备份存档以供参考。日志文件记录了移动的文件以及何时移动。使用输出管道命令继续上面的示例:
... > E:\archive\msdeploy.log
答案 5 :(得分:1)
没有人提到Final Builder http://www.finalbuilder.com。它与Visual build Pro相同。用于创建自动构建部署线束的良好GUI
答案 6 :(得分:0)
Fabric。似乎小,简单,程序化。用Python编写,因为Ruby是禁止的(为什么?)。
答案 7 :(得分:0)
查看Setup Factory(来自靛蓝玫瑰)。它的功能非常强大。它使用Windows安装程序API。它可以做你需要的。
答案 8 :(得分:0)
Nant应该存在的唯一原因是你有一个类似于Ant的框架,我们可以使用.NET语言编写任务。如果您不想让纯.NET开发人员编写自定义任务,我看不出您无法使用Ant的任何原因。仅仅因为您使用.NET语言编写应用程序,并不意味着您必须使用.NET构建工具。