为Web应用程序自动部署?
我的团队正在尝试自动部署我们的.Net和PHP Web应用程序。 我们希望简化部署,避免手动操作造成的麻烦和许多麻烦。
我们需要一个解决scheme,使我们能够:
- 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。
有没有其他的部署工具可以帮助我们?
谢谢大家的好意。 我们仔细检查了一下,但经过仔细考虑,我们决定用CruiseControl,NAnt,MSBuild和MSDeploy的组合来推出我们自己的产品。
这篇文章有一些很好的信息: 集成MSBuild和CruiseControl.NET
这大致是我们的解决scheme如何工作:
- 开发人员构build应用程序的“debugging”版本并运行unit testing,然后签入SVN。
- CruiseControl看到更新并调用我们的构build脚本…
- 在构build数据库上运行任何新的迁移
- 用生成服务器configurationreplaceconfiguration文件
- 构build应用程序的“debugging”configuration
- 运行所有单元和集成testing
- 构build应用程序的“部署”configuration
- 版本与当前的主要/次要版本和SVN版本的DLL,例如1.2.0.423
- 将这个新版本移到我们的构build服务器上的“release”文件夹中
- 删除不需要的文件
- 如果需要,更新生成服务器上的IIS
然后,当我们validation了一切准备就绪后,我们运行另一个脚本来:
- 在live /登台服务器上运行迁移
- MSDeploy:归档当前的现场/暂存站点
- MSDeploy:同步网站从生成到生活/分期
这个阶段并不是很好,但现在大部分都是像魅力一样工作:D
当我们对stream程进行修改时,我会尽量保持这个答案的更新,因为现在似乎有几个类似的问题。
我已经使用了Visual Build Pro多年,它非常漂亮,易于使用,并且有很多标准操作(比如你提到的)。
我使用Puppet ,Makefiles来构buildRPMs和Bamboo来为我做这个。 我的系统不能直接应用,而且我不熟悉Windows世界,但有一些可转换的模式。
我的make设置允许我为构build我的应用程序的所有东西(php libs,php网站,perl模块,C应用程序等)构buildRPM。 这可以手动调用,或者通过Bamboo。 我将这些RPM转换成yum repo,并且木偶会处理确保在群集中安装最新(或正确)的软件版本。
你能自动化构build软件包到MSI吗? 我认为Puppet可以在Windows中pipe理软件包和版本的安装。
我为此使用msdeploy。 它工作完美。
关于Ant; 对于.NET平台,我们有NAnt,您可以将它与MSDeploy结合使用; 您可以从您的Nant脚本调用MSDeploy。
编辑:只是要清楚的事情; 你可以用msdeploy做所有事情。 使用南特不是要求。
我们设法使用带有UNC地址的-source:dirpath命令来使用xcopy,而不是使用msdeploy。 关键是ignoreAcls = true,并在msdeploystring中删除对用户名和密码的调用:
msdeploy -verb:sync -source:dirpath=\\build\e$\app -dest:dirpath=\\live\d$\app,ignoreAcls=true
该示例将站点从我们的构build服务器的E驱动器部署到我们的实时服务器上的D驱动器。 暴露共享或活动服务器上的磁盘访问级别有一些安全考虑因素。 我们目前正在考虑使用有限的访问共享文件夹。
然后,我们将此输出传输到一个日志文件,然后将其移动到备份存档以供参考。 日志文件logging哪些文件被移动,何时。使用输出pipe道命令继续上面的例子:
... > E:\archive\msdeploy.log
没有人提到最终生成器http://www.finalbuilder.com 。 它与Visual build Pro相媲美。 用于创build自动构build部署线束的良好GUI
面料 。 看似小,简单,程序化。 用Python编写,因为Ruby是不可以的(为什么?)。
检查安装工厂(从靛蓝玫瑰)。 它的function非常强大。 它使用Windows安装程序API。 它可能可以做你所需要的。
Nant应该存在的唯一原因是你有一个类似于Ant的框架,我们可以使用.NET语言编写任务。 如果您不想让纯.NET开发人员编写自定义任务,则看不到任何不能使用Ant的原因。 仅仅因为你用.NET语言编写应用程序,并不意味着你必须使用.NET构build工具。