8

我是一个开发团队的一员,该团队使用 Joomla 和 Drupal 等系统处理许多基于 CMS 的项目。

在我们的开发过程中,我们所有的代码更改都在 Git 内部进行管理。在 sprint 结束时,我们创建一个DIFF,我们可以通过补丁将其应用到实时站点。

问题是大多数时候,变化包括

  • 数据库架构更改
  • 数据库数据更改
  • 源代码更改
  • 二进制文件更改(如图像)

Git Diff 可以很好地处理源代码更改。二进制文件仅不包含在 Diff 中,除非参考文件已更改的事实。

数据库架构更改和数据库数据更改是一团糟。

我在徘徊,是否存在类似统一的补丁系统,可用于在 1 个补丁中部署所有这些更改。

所以问题是,“是否有一个系统可用于一次性部署所有这些更改?

理想情况下,该系统将允许像补丁一样运行干运行,但适用于所有 4 种数据类型。

编辑:感谢大家提供的反馈,这是我在该领域进行研究的起点。

这是我到目前为止发现的:

  1. 使用 linux 打包系统部署基于 php 的应用程序很困难,因为对项目的更改是迭代发生的,而不是作为发布发生的。

  2. 可以使用 dbconfig 将更改部署到项目,但问题是生成 mysql db 差异(模式和数据)

  3. 部署基于 php 的应用程序真正缺少的是一个部署管理器,它将安装在服务器上,并将作为部署补丁的接口

我在这个主题上创建了一个 Google Wave,结果产生了很多信息。如果有人有兴趣阅读这一波,请告诉我,我会加你。

4

4 回答 4

2

为了处理我们应用程序的安装和升级,我们使用debian 打包系统。( .deb 包)

背景:我们正在制作 J2EE + Flex 应用程序。通过 VPN 进行运输和管理。所以离你不远。

一个版本的全新安装和升级是通过 puppet 完成的(用于自动化系统管理任务的系统:他安装我们的 .deb )

在 .deb 我们有

  1. 我们编译的源代码
  2. 数据库的模式(由 [db-config][1] 处理)
  3. 二进制的东西
  4. 如何通过 apt 安装所需的所有其他应用程序(mysql、tomcat ...)

=全新安装的所有东西

我们还添加了从一个版本到另一个版本的信息

  1. 升级数据库的脚本(每个版本)
  2. 新二进制
  3. 机器启动时要发布的新东西(例如:几周前我们添加了一个activeMQ服务器)

=> 正确制作 .deb 后,我们可以在一次操作中无缝安装或升级。(它是自动制作的,没有任何提示)。

他们每个发行版都有一个 .deb,每个 .deb 都有一个版本号和一个签名。您可以选择我们的任何 .deb 文件并进行全新安装或从实际版本升级到他持有的版本号。

.deb 在我们的持续集成系统中。(我们每小时构建一个 .deb,就像我们即将发布一个新版本一样)


有什么好处?

  • 自信地自动安装/升级。
  • 回滚版本
  • run dry 原生支持

在您的确切情况下

* Database Schema Changes
* Database Data Changes
* Source Code changes
* Binary file changes (like images)

数据库 => 您将不得不编写迁移脚本。每个版本一个。(例如:1.2-update.sql 1.3-update.sql)

源代码和二进制 => 添加它们,比如在女巫版本中它们必须被复制/使用

编辑:我不确定源代码。我们正在使用已编译的代码来做到这一点......


一些链接开始:

https://wiki.ubuntu.com/PackagingGuide/Complete

http://www.debian.org/doc/manuals/maint-guide/index.fr.html#contents(法语)

[1]:http : //pwet.fr/man/linux/formats/dbconfig dbconfig

[1]: http: //www.debian.org/doc/FAQ/ch-pkg_basics.en.html debian

于 2009-11-27T17:00:48.847 回答
1

我认为您不会找到故障安全机制。

我建议您在进行架构/数据更改时尽可能考虑与当前发布的源的兼容性。

通过这种方式,您可以制作一个简单的工具,运行提交到特定 svn 位置的数据库脚本(您不希望数据库更改上的差异,就好像您需要进一步修改您需要不同的语句一样)。

完成上述操作后,您可以使用一个简单的命令来运行数据库更改,然后更改二进制和源代码。

对于数据库,还有模式和数据比较工具的选项,这些可用于比较环境并确保更改脚本中没有任何意外丢失 - 也可以生成更改脚本,但正如我所说,你真的想要确保它不会破坏电流源。

于 2009-11-27T16:22:42.420 回答
0

您可以创建一个工具来轻松进行迁移——类似于 Peoplesoft 的补丁升级助手。

它基本上是一个独立的可执行文件,可以读取“升级模板”并执行任务。升级模板以声明方式描述升级任务或“步骤”。这些步骤可能是 - 复制(用于备份或移动预编译对象,如类和其他二进制文件)、数据库(用于更改模式元素)、SQL 脚本(用于加载或转换当前数据)。这些步骤将具有一些谓词逻辑能力 - 如果是这样,请执行此操作,否则跳过它并转到下一步等。

模板通常是一个 XML 文件。它还提供带有手动操作说明的手动步骤。每个步骤还指定它是否可恢复。它还将验证该步骤是否成功。

围绕这个非常普遍的要求可能有一个开源项目。

于 2009-11-27T17:39:29.483 回答
0

您需要将 git commit 对象保存在本地文件中,然后将它们导入其他 repo/branch。

于 2009-12-01T11:12:51.767 回答