我的团队目前正在尝试自动化 .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。

还有其他部署工具可以帮助我们吗?

有帮助吗?

解决方案

谢谢大家的好意建议。我们检查了所有这些,但经过仔细考虑,我们决定结合 CruiseControl、NAnt、MSBuild 和 MSDeploy 来推出我们自己的产品。

这篇文章有一些重要的信息:将 MSBuild 与 CruiseControl.NET 集成

我们的解决方案的工作原理大致如下:

  • 开发人员构建应用程序的“调试”版本并运行单元测试,然后签入 SVN。
  • CruiseControl 看到更新并调用我们的构建脚本...
    • 在构建数据库上运行任何新的迁移
    • 将配置文件替换为构建服务器配置
    • 构建应用程序的“调试”配置
    • 运行所有单元和集成测试
    • 构建应用程序的“部署”配置
      • 使用当前主要/次要版本和 SVN 修订版对 DLL 进行版本控制,例如1.2.0.423
      • 将此新构建移动到构建服务器上的“release”文件夹
      • 删除不需要的文件
    • 如果需要,更新构建服务器上的 IIS

然后,当我们验证一切都已准备好进入实时/暂存状态时,我们运行另一个脚本来:

  • 在实时/临时服务器上运行迁移
  • MS部署:存档当前的直播/登台站点
  • MS部署:将站点从构建同步到实时/暂存

到达这个阶段的时候并不顺利,但现在基本上已经发挥了作用:D

当我们对流程进行更改时,我将尝试更新此答案,因为现在 SA 上似乎有几个类似的问题。

其他提示

我用过 视觉构建专业版 多年来,它非常流畅且易于使用,并且内置了许多标准操作(如您提到的那些)。

我用 木偶, ,用于构建 RPM 的 Makefile 和 竹子 为我做这件事。我的系统并不直接适用,而且我对 Windows 世界也不太熟悉,但有一些可移植的模式。

我的 make 设置允许我为构成我的应用程序的所有内容(php 库、php 网站、perl 模块、C 应用程序等)构建 RPM。这可以手动调用,也可以通过 Bamboo 调用。我将这些 RPM 转移到 yum 存储库和 puppet 句柄中,确保集群中安装了最新(或正确)版本的软件。

您能否自动将软件包构建到 MSI 中?我认为Puppet可以管理Windows中软件包和版本的安装。

我为此使用 msdeploy。它工作完美。

关于蚂蚁;对于.NET 平台,我们有 NAnt,您可以将它与 MSDeploy 结合使用;您可以从 Nant 脚本调用 MSDeploy。

编辑:只是为了把事情说清楚;您可以使用 msdeploy 完成所有操作。使用 Nant 不是必需的。

我们没有使用 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

没有人提到最终生成器 http://www.finalbuilder.com. 。它与 Visual build Pro 相当。用于创建自动化构建部署工具的良好 GUI

织物. 。看起来小、简单、程序化。用 Python 编写,因为 Ruby 是禁忌(为什么?)。

查看Setup Factory(来自靛蓝玫瑰)。它的功能非常强大。它使用 Windows 安装程序 API。它可能可以满足您的需要。

Nant 存在的唯一原因是让您拥有一个类似于 Ant 的框架,我们可以在其中使用 .NET 语言集编写任务。如果您不想让纯 .NET 开发人员编写自定义任务,我看不出您有什么理由不能使用 Ant。仅仅因为您使用 .NET 语言编写应用程序,并不意味着您必须使用 .NET 构建工具。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top