2009-11-24 42 views
8

我是使用Joomla和Drupal等系统开发许多基于CMS项目的开发团队的一员。如何部署:1修补程序中的数据库,源代码和二进制文件更改?

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

的问题是,大部分的时间,这些变化包括

  • 数据库结构更改
  • 数据库数据的变化
  • 源代码更改
  • 二进制文件的更改(如图片)

Git Diff处理源代码变化很漂亮。除了引用文件已更改的事实外,二进制文件仅包含在Diff中。

数据库模式更改和数据库数据更改是一团糟。

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

所以现在的问题是,“有没有可用于部署的所有这些变化在1次射门的系统?

理想的情况下,该系统将允许运行干运行像补丁,但对于所有的4个数据类型的

编辑: 谢谢大家对您提供的反馈意见,这是对我在这方面的研究起点

这是我迄今发现:

  1. 这是很难使用Linux包装 系统部署基于PHP的 应用程序,因为更改 项目反复发生而 然后作为释放。

  2. 这将有可能使用DBCONFIG部署变为 项目,但问题是 生成的MySQL数据库的diff(架构 和数据)

  3. 真正缺少的基于PHP应用程序部署 是将 在服务器上安装部署管理器,并会 是部署 补丁

接口

我在这个主题上开了一个Google Wave,并产生了很多信息。 如果有人有兴趣阅读这一波,请让我知道,我会加你。

回答

2

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

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

全新安装和升级版本到另一个是通过木偶制作(自动化系统管理任务的系统:安装他我们的.deb文件)

在.deb文件,我们有

  1. 我们的编译源码
  2. 的数据库的模式
  3. 二进制东西(由[DB-配置] [1]处理)
  4. 如何安装throught易于所有其它应用NE EDED(MySQL和Tomcat的...)

=一个新鲜的东西全部安装

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

  1. 脚本升级数据库(每个版本)
  2. 新的二进制
  3. 新的东西在机器启动劳克(如:几个星期前,我们必须添加的ActiveMQ服务器)

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

Theire是每一个realease的.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

+0

+1符合我所说的,用特定的包装系统使用+版本跟踪评论。请注意,如果不考虑与以前版本的应用程序的数据库兼容性,则应在发布和回滚期间将站点/服务置于离线状态,以防发生故障。 – eglasius 2009-11-27 17:27:04

+1

@Antoine Claval,非常感谢您的反馈,我发现它非常有帮助。感谢您抽出时间来概述您的部署策略,我认为您应该享有声望点:) – 2009-12-03 18:55:41

1

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

我建议,在可能的情况,你做架构/数据发生变化时,考虑到与目前公布的源帐户的兼容性。

这种方式可以使一个诉简单的工具,运行致力于特定的svn目录(你不想对数据库的变化差异,因为如果你需要进一步的修改,你需要不同的语句)数据库脚本。

通过上述操作后,可以有运行数据库的更改,那么二进制&修改源代码的简单命令。

对于数据库还有的架构&数据比较工具的选项,这些可以被用来比较&确保有没有什么意外的更改脚本缺少环境 - 也可能产生变化的脚本,但我说你真的想确保它不会打破当前的来源。

0

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

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

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

围绕这个需求开放源代码项目是很常见的。

+0

@ srini.venigalla,至今为止您的答案与我所寻找的最接近。我想知道这样的工具是否已经存在,是否开源。我认为需要这种开源工具。我一直在考虑如何生成数据库模式和内容数据差异以用于这种工具。你对这个主题有什么想法吗? – 2009-11-27 17:51:07

+1

@ srini.venigalla你正在描述debian包装系统:)。升级模板是一个rules.xml,你可以在每种情况下说出要做什么(安装,更新,卸载...) – 2009-11-30 11:32:10

+0

嗯..我主要是Windows的家伙。只需转移到Mac。与Ubuntu和Mac端口混在一起,但与Debian差不多。将Debian的这个子系统创建为一个通用的软件包会很好!我很想多次构建一个这样的工具,但从未听过更高级的调用:-) – 2009-12-03 01:39:20

0

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