自动部署Web应用程序?
我的团队目前正在尝试自动化.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。
还有其他可以帮助我们的部署工具吗?
解决方案
回答
织物。似乎很小,简单,程序上。用Ruby编写,因为Ruby是不可以的(为什么?)。
回答
检出Setup Factory(来自靛蓝玫瑰)。它的功能相当强大。它使用Windows安装程序API。它可能可以满足需求。
回答
我已经使用Visual Build Pro多年了,它非常漂亮,易于使用,并且内置了许多标准操作(如我们提到的操作)。
回答
我使用Puppet,Makefiles来构建RPM,而Bamboo则为我做这件事。我的系统没有直接应用,并且我不熟悉Windows世界,但是有一些可移植的模式。
我的make设置允许我为构成我的应用程序的所有内容(PHP库,PHP网站,Perl模块,C应用程序等)构建RPM。这可以手动调用,也可以通过Bamboo调用。我将这些RPM转移到yum repo和puppet句柄中,以确保在群集中安装了最新(或者正确)版本的软件。
我们可以自动将软件包构建到MSI中吗?我认为Puppet可以管理Windows中软件包和版本的安装。
回答
谢谢大家的建议。我们检查了所有内容,但经过仔细考虑,我们决定结合使用CruiseControl,NAnt,MSBuild和MSDeploy。
本文提供了一些重要信息:
将MSBuild与CruiseControl.NET集成
我们的解决方案大致如下:
- 开发人员构建应用程序的"调试"版本并运行单元测试,然后签入SVN。
- 将配置文件替换为构建服务器配置
- 构建应用程序的"调试"配置
- 运行所有单元和集成测试
- 将此新版本移至我们构建服务器上的" release"文件夹
- 删除不需要的文件
- 根据需要更新构建服务器上的IIS
然后,当我们验证了一切准备就绪可以进行直播/分阶段时,我们运行另一个脚本以:
- 在实时/临时服务器上运行迁移
- MSDeploy:存档当前的实时/暂存站点
- MSDeploy:将站点从生成同步到实时/暂存
到了这个阶段还不太好,但是现在它的工作原理很像:D
随着我们对流程的更改,我将尝试使此答案保持最新,因为SA上现在似乎有几个类似的问题。
回答
而不是使用xcopy,我们设法使用带有UNC地址的-source:dirpath命令连接到具有msdeploy的服务器。关键是ignoreAcls = true,并删除msdeploy字符串中对用户名和密码的调用:
msdeploy -verb:sync -source:dirpath=\build\e$\app -dest:dirpath=\live\d$\app,ignoreAcls=true
该示例将站点从构建服务器的E驱动器部署到实时服务器上的D驱动器。在实时服务器上公开共享或者此级别的磁盘访问时,需要考虑一些安全方面的考虑。我们目前正在研究使用受限访问共享文件夹。
然后,我们将此输出通过管道传输到日志文件,然后将其移至备份存档以供参考。日志文件记录了哪些文件被移动以及何时被移动。使用输出管道命令继续上面的示例:
... > E:\archive\msdeploy.log
回答
我为此使用msdeploy。完美的作品。
关于蚂蚁;对于.NET平台,我们拥有NAnt,我们可以将其与MSDeploy结合使用;我们可以从Nant脚本调用MSDeploy。
编辑:
只是为了弄清楚;我们可以使用msdeploy进行所有操作。不需要使用Nant。
回答
Nant应该存在的唯一原因是,我们将拥有一个类似于Ant的框架,在该框架中,我们可以使用.NET语言集来编写Task。如果我们不想让纯净的.NET开发人员编写自定义任务,我看不出我们无法使用Ant的任何原因。仅仅因为我们使用.NET语言编写应用程序,并不意味着我们必须使用.NET构建工具。
回答
没有人提到Final Builder http://www.finalbuilder.com。它与Visual build Pro相当。良好的GUI,可用于创建自动化的构建部署工具