gpt4 book ai didi

php - SVN网站开发部署解决方案

转载 作者:可可西里 更新时间:2023-10-31 23:00:25 24 4
gpt4 key购买 nike

情况是这样的:我们有多名具有不同程度命令行经验的开发人员,我们正在为我们的网站整合一个部署解决方案。生产环境是2个SUSE Linux boxes。开发环境也是SUSE Linux box。每个开发人员在他们的主目录中都有/将有一个 SVN 树的副本用于开发和测试。

目标是拥有一个易于使用且易于恢复的发布系统,该系统可与多个生产服务器一起使用。如果非网络开发人员(仍然是不在网络世界中的编码人员)也可以轻松恢复任何网站,那将是一个奖励。在理想情况下,发布就像在您要发布的网站上运行单个命令一样简单。此命令将更新生产服务器并在其唤醒时留下恢复路径。

我们目前的部署解决方案有点笨拙,很难恢复,而且速度很慢。我们目前使用 SVN checkin 所有文件。然后运行一个脚本,基本上在 SVN 中创建一个标签。然后运行第二个脚本,该脚本进入 2 个生产服务器中的每一个并运行“svn up”。

有什么建议吗?

最佳答案

我是一个 .net 专家,因此在 Windows 世界中工作...话虽如此,但我每天使用的管理构建过程的技术都来自您的世界! (Linux/java 技术在括号中,但我也为 Windows 读者提供了它们的等效技术)我使用 CruiseControl.NET ( CruiseControl ), VisualSVN ( SVN ), Tortoise , 和 NAnt ( Ant ) 来满足我所有的构建需求。

我的所有构建通常在 checkin 时自动推送和标记。这是通过 CruiseControl 完成的,因为它监视我的源代码控制(SVN 或 SubVersion)。当 CruiseControl (CC) 发现新代码已 checkin 时,它将执行一个 CC 项目,该项目依次调用构建服务器上的 Ant 脚本。

Ant 脚本在一个公共(public)构建中为我做了几件事情。它将检查最新代码的副本并将其带到构建服务器。然后它将构建代码以确保至少可以编译。然后它设置我的数据库的干净副本并执行任何 sql 脚本以将该基线数据库构建到当前版本。然后我运行我所有的单元测试项目。然后我运行集成测试,其中包括测试我的存储库层以确保代码仍然与我的后端保持一致(我通常在我的项目中使用 ORM,所以它们很少不同步......但这是一个很好的步骤进行中)。一旦所有测试都通过(或失败),我将数据库回滚到干净状态并执行脚本以将其升级到当前版本(这很重要,因为它为团队提供了一个干净的数据库,可以在单击时进行开发一个按钮)。如果构建成功,那么我会将代码部署到开发服务器(我也可以一键部署到我的登台服务器和生产服务器)。如果你想在每次 checkin 时标记你的代码库,你也可以在这里做。

完成所有这些后,我想使用 NDepend 对我的代码进行一些分析。 , NDoc , 和 NCover . NDepend 是一种代码分析工具,用于确保事物在架构上是正确的,命名标准是它们应该的,以及更多。 NDoc 提取所有代码注释并为我的代码创建 MSDN 风格的文档。 NCover 告诉我我的代码是否有适当的单元测试覆盖。

然后,我编写了一个自定义 Ant 任务,该任务针对各种//TODO 和//CodeDebt 标记解析我的所有代码,以生成另一个报告来告诉我(通常在冲刺结束时)有多少废话在我的代码库中累积。然后可以将其纳入下一个冲刺。

所有这些报告要么包含在发出的构建电子邮件中,要么链接得过于恰当。

请记住,以上所有操作都会在每次签到时发生...并且无需任何人点击一个按钮!这才是真正的持续集成,应该成为每个构建大师的目标。

CruiseControl 有一个基于 Web 的控制台,它还允许非 Web 开发人员(任何人)进入并执行此推送,而无需 checkin 代码...称为强制构建。

有了这个框架,只要一切都在版本控制之下,您也可以轻松地回滚推送。您将需要另一个 Ant 脚本来执行相同的过程,但有一个额外的首要任务,因为它必须获取最新版本的代码而不是最新版本的代码才能执行构建过程。所有 Ant 任务都可以在不同的执行目标中重复使用。

关于php - SVN网站开发部署解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com