Git、Beanstalk、WordPress 终极部署方法

Posted

技术标签:

【中文标题】Git、Beanstalk、WordPress 终极部署方法【英文标题】:Git, Beanstalk, WordPress Ultimate Deployment Approach 【发布时间】:2011-11-02 08:17:46 【问题描述】:

我正在使用 Git 和 Beanstalk 在本地开发 WordPress,然后使用 Beanstalk 的部署过程部署到生产服务器。 但是如何将生产服务器上所做的更改同步回我的本地开发/git repo?只要有人安装插件,服务器上的更改就会发生。有没有办法将这些更改拉回本地?

感谢您对初学者的理解提供任何帮助。谢谢!

【问题讨论】:

这不是一个安全问题吗?因为您将第 3 方代码作为 好的副本提交回您的存储库? 【参考方案1】:

我运行 CMS,正如我在评论中所说,我在 manojlds 的帮助下设置了工作流程。我想扩展我们的实施,希望能帮助您处理用户创建的内容。

我将 gitolite 设置为我们的远程存储库。它摇摆不定。

我们的分支模型是这样工作的,使用 WordPress 作为上下文:

master - # this is the _vanilla_ install of wordpress with no modifications
prod - # the branch that the production server pushes/pulls to
dev - # dev environment pushes/pulls to, in our case a server
alpha - # really early development, ideas, etc - my personal branch that i work on mostly
features (opt) - # as needed, I'll make feature branches then merge them into the other branches.

我们的产品每天处理大约 40-45 个不同的静态文件,它有一个每天自动添加/提交用户更改的文件和数据的 cron。这会拾取所有基于用户的更改,并且(在您的情况下)会拾取插件安装。这很棒,因为您有他们的安装历史记录。

对代码库的实际更改通常在 alpha 中进行探索,然后合并到 dev。我们创建了一些钩子,当我们 push 到 dev 分支时,开发服务器会自动 pulls 新提交。然后它们会同步。

在开发环境中对其进行测试后,我将本地生产分支与远程同步,如前所述,它每天都会获得用户内容提交。然后我将mergecherry-pick 提交到产品中,然后push 对gitolite 进行刺激。之后prod serverpulls,大家都很开心。

这听起来像是很多工作,但实际上非常有效,尤其是在编写了一些钩子脚本之后。我仍在调整我们的部署过程中(例如,我几乎可以完全摆脱 alpha 分支并在本地使用 dev/feature),但实际上每天都有生产服务器,以及随时同步所有分支的能力。

另外,关于您的 master 分支 - 将其保留为 WordPress 的香草安装非常棒,因为您实际上可以轻松地测试新版本升级。您可以只签出 master 然后运行更新,然后慢慢集成自定义。

【讨论】:

谢谢——这似乎完成了从生产到开发再到生产的周期。据我了解,这里的关键是从生产服务器提交到某处的存储库。然后将该存储库拉入开发,探索,然后推回生产。我认为这就是你所说的要点。 您提到“用户更改的文件和数据”——这是否意味着您也在通过此过程跟踪数据库更改? 嗯,我们正在处理静态文件(与 WP 所做的数据库驱动存储相反),因此我们专门跟踪这些文件的更改。我们正在探索对数据库进行版本控制的方法,但还没有找到有效的方法。不过,Ghost DB 似乎是一个不错的起点。 另外,是的,您似乎掌握了我们如何使用 git。我们爱爱爱爱我们的 gitolite 服务器,这是一个非常有效的部署。 谢谢@melee。这一切真的帮助我把这些碎片放在一起。【参考方案2】:

在我看来,最好不要在生产中进行更改。难道你不能看看一种安装插件的方法,你可以将插件添加到 git repo 并将其推送到 prod 吗?我知道您可能正在谈论从 WordPress UI 安装插件并将其添加到 PROD,但我认为您应该获取插件内容,添加到您的存储库并推送到 PROD。

如果这根本不可能,您必须确保在 PROD 中安装新插件时提交插件内容,然后您可以git pull 要同步的内容。

【讨论】:

让我们看看我是否理解第 2 段:在 PROD 上安装 git,安装插件后,执行 Add and Commit。然后在我的本地回购中,我做拉?然后我应该推送到 Beanstalk 并选择部署回服务器以完成循环。 @manojlds 在我部署 git 时帮助了我。我必须同意这里。应首先在您的开发环境中进行更改,与 local 生产分支合并,然后从 prod 服务器中提取(或同步,如果您想以这种方式查看)。这有意义吗? 就我而言,如果您需要提交到生产服务器上的存储库,您可能做错了。我建议您设置一个开发环境,在其中安装、配置和测试插件 - 当它们稳定时,您提交它们并重新部署网站。 我明白了。但是,我仍然试图解决我最初的问题,即当人们通过 WordPress 管理员安装插件或上传照片等时该怎么做。那么应该怎么做呢?并非每个网站都通过严格的本地开发生产周期进行管理。 WordPress 和其他 CMS 的构建是为了能够通过管理员安装插件和上传图像(等),因此应该有针对这些情况的方法。 我的印象是 AWS DevTools 是只写的。我什至认为没有可用的git pull 函数。或者也许这就是要开始的问题。 . .【参考方案3】:

我认为简短的回答是这个过程被 wordpress 打破了。 我还没有找到一个解决方案,通过 ftp 访问的 wordpress 可以将其更改的文件添加到 repo 并成为新版本。

让我先把它收回一分钟。我的意思是没有用户干预。如果您将您的 ftp 映射为驱动器和/或将您的生产站点同步回主干中的计算机,然后提交更改,您可以将 wordpress 生产服务器上发生的事情返回到您的存储库。

没有删除 wordpress 中允许用户执行编码人员认为不好的做法的所有不错的功能,应该有一个解决方案。我正在使用 beanstalk,如果除了部署到生产服务器之外,我还可以告诉它自动将来自生产服务器的更改添加回 repo 并通知我更改。然后我可以去比较正在发生的任何事情,如果它有问题,请从以前的版本重新部署。

目前情况有限,需要做更多工作。我想我可以尝试构建自己的自动拉取和签入机制,但这听起来很累。如果有人知道更好的方法(除了使用 SSH 运行服务器),我很想听听解决方案。

【讨论】:

这如何增加、纠正或改进已经接受的答案?

以上是关于Git、Beanstalk、WordPress 终极部署方法的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 上的 Wordpress

在 Elastic Beanstalk 上部署 WordPress?

利用 AWS Elastic Beanstalk 部署 Wordpress 环境

Elastic Beanstalk 上的 Https - wordpress

带有 Elastic Beanstalk CLI 的 WordPress

在 Elastic Beanstalk 上部署 Wordpress 的多个问题