我是一个开发团队的成员,该团队使用Joomla和Drupal等系统处理许多基于CMS的项目。
在我们的开发过程中,我们所有的代码更改都在Git内部进行管理。在sprint结束时,我们会创建一个 DIFF ,我们可以通过 patch 将其应用到实时网站。
问题是大多数时候,变化包括
Git Diff可以很好地处理源代码更改。二进制文件仅包含在Diff中,除非引用文件已更改。
数据库架构更改和数据库数据更改是一团糟。
如果存在可用于在1个补丁中部署所有这些更改的统一补丁系统,我就会徘徊。
所以问题是,“是否有一个系统可用于在一次拍摄中部署所有这些变化?
理想情况下,这个系统允许像补丁一样运行干运行,但对于所有4种数据类型都是如此。
修改: 感谢大家提供的反馈,这是我在这方面的研究的起点。
这是我到目前为止所发现的:
基于php部署很困难 使用linux打包的应用程序 系统因为改变了 项目反复进行 然后作为发布。
可以使用dbconfig将更改部署到a 项目,但问题是 生成mysql db diffs(schema 和数据)
部署基于php的应用程序真正缺少的是什么 是一个部署经理 安装在服务器上并且会 是部署的接口 补丁
我在这个主题上开了一个Google Wave,结果产生了很多信息。 如果有人有兴趣阅读此浪潮,请告诉我,我会加你。
答案 0 :(得分:2)
为了处理我们的应用程序的安装和升级,我们使用debian packaging system 。 (.deb包)
背景: 我们正在制作J2EE + Flex应用程序。通过VPN运输和管理。 所以离你不远。
通过puppet(一个用于自动执行系统管理任务的系统:他安装我们的.deb),可以完全安装和升级版本到另一个版本。
在.deb中我们有
=所有新安装的东西
我们还会添加从版本到另一个版本的信息
=>一旦正确生成.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。