如何部署:1个补丁中的数据库,源和二进制更改?

时间:2009-11-24 16:59:06

标签: deployment migration patch

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

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

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

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

Git Diff可以很好地处理源代码更改。二进制文件仅包含在Diff中,除非引用文件已更改。

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

如果存在可用于在1个补丁中部署所有这些更改的统一补丁系统,我就会徘徊。

所以问题是,“是否有一个系统可用于在一次拍摄中部署所有这些变化?

理想情况下,这个系统允许像补丁一样运行干运行,但对于所有4种数据类型都是如此。

修改: 感谢大家提供的反馈,这是我在这方面的研究的起点。

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

  1. 基于php部署很困难 使用linux打包的应用程序 系统因为改变了 项目反复进行 然后作为发布。

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

  3. 部署基于php的应用程序真正缺少的是什么 是一个部署经理 安装在服务器上并且会 是部署的接口 补丁

  4. 我在这个主题上开了一个Google Wave,结果产生了很多信息。 如果有人有兴趣阅读此浪潮,请告诉我,我会加你。

4 个答案:

答案 0 :(得分:2)

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

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

通过puppet(一个用于自动执行系统管理任务的系统:他安装我们的.deb),可以完全安装和升级版本到另一个版本。

在.deb中我们有

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

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

    1. 用于升级数据库的脚本(针对每个版本)
    2. new binary
    3. 机器启动时的新东西(例如:几周前我们添加了一个activeMQ服务器)
    4. =>一旦正确生成.deb,我们就可以在一次操作中无缝安装或升级。 (它是自动生成的,没有任何提示)。

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

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


      有什么好处?

      • 自信地自动安装/升级。
      • 回滚版本
      • 本身支持

      在您的确切情况下

      * 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

答案 1 :(得分:1)

我认为你不会找到一个自动防故障机制。

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

通过这种方式,您可以创建一个简单的工具来运行提交到特定svn位置的数据库脚本(您不希望在数据库更改时使用diff,就像需要进一步修改一样需要不同的语句)。

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

对于数据库,还有模式和数据比较工具的选项,这些工具可用于比较环境和数据。确保更改脚本中没有任何意外遗漏 - 也可以生成更改脚本,但正如我所说,您确实希望确保它不会破坏当前源。

答案 2 :(得分:0)

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

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

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

可能有一个围绕这个要求的开源项目很常见。

答案 3 :(得分:0)

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