任何人都可以针对以下问题提供任何指示,基本上我们正在使用CMS(目前是Drupal),并且所有更改都由网站的编辑在生产中进行,这意味着我们的Dev / QE / Stage环境始终如一与生产不同步,即在其后面而不是在前面。显然,为了实现持续集成/交付,这无法继续。
有几种方法可以解决这个问题,其中一种方法是让一个“黄金”环境不在生产环境中进行所有编辑更改等,然后将其推送到QE / Stage,然后转到Prod即......
Dev - >金 - > QE - >阶段 - >刺
通过这种方式,我们可以随时告诉生产中的内容,我们可以锁定它等等。我们有一个最新的QE环境,它具有什么样的推动力。
问题是虽然在Drupal中执行此操作看起来会涉及大量复杂性,因为配置存储在数据库中,编辑可以进行我们无法实际控制的更改,我们需要构建或安装一堆模块有效地“区分”数据库并推动SQL脚本向前发展,这里有一些尖叫的错误,我不愿意开始编写工具来做这件事。
任何人都可以指出我为任何CMS提供的任何资源,我们并不依赖于Drupal,事实上,如果解决这个问题或者至少让它变得非常简单,一个更简单的CMS会吸引我们很多。
答案 0 :(得分:2)
这是许多CMS的一个特性:配置部分存储在数据库中,这模糊了什么是开发,什么是配置和什么是内容编辑之间的界限。这在很大程度上取决于CMS的灵活性,因此需要由网站决定。
但是如果你没有在你的网站中创造这样的区别,那就意味着你所有的内容编辑都需要精通CMS的所有细节,因为他们可以改变配置,甚至在像Plone这样的CMS中,通过-the-网。
因此,您需要确保每个人只有权更改他们需要更改的内容。这反过来需要一个高度灵活和详细的许可系统,如Plone的。
此区域中存在问题的典型网站的示例是,您只需要一个或两个内容编辑者也是管理员,他们使用具有完全权限的帐户,通常他们使用管理员帐户进行内容编辑。当更多内容编辑者到达时,他们只会获得管理员密码进行一些小的更改,然后成长为更多的编辑职责,但继续使用管理员帐户。因此,编辑网站的每个人都可以完成所有工作,甚至无法看到之后是谁进行了更改。
在管理良好的网站中,内容编辑者无法编辑或更改网站运行所需的任何内容。假设您有一个包含产品类别的站点,其中每个类别也需要一个概述文档,那么编辑者就没有权利删除概述文档,因为这样做会破坏所有小类别链接。您需要确定编辑/管理角色(可能有很多),并确保每个角色都具有所需的权限,然后将角色分配给帐户。
如果您最终处于难以发放权限并且编辑者倾向于拥有太少或太多权限的情况下,则表明您未正确地将内容与网站开发分开,并且可能需要考虑重组一些代码和/或内容。在没有详细许可系统的情况下,这当然会在简单的CMS上更快地发生,这可能表明你已经超出了系统(这使我们进入Plone IMO的主要销售点:你不太可能永远不会像CMS那样长大,虽然它仍然很容易上手。)
您似乎希望对完成的网站进行持续集成测试,包括其内容。这既是好主意,也是坏主意。不好的第一个:
我认为对内容进行持续集成测试是不可行的,并且有些误导。如果您允许编辑在现场网站上编辑经过测试的内容,这也是完全不可能的,因为他们可以随时随意破解,见上文。
但是对完成的网站进行测试并不一定是个坏主意。不过,我不会将它作为持续集成测试的一部分。这是因为这些测试通常是由代码中的更改触发的。
我的建议是将设置拆分为开发和编辑。开发环境是本地开发服务器和持续集成设置的常规环境,以及编辑器可以测试新功能的测试服务器。
每次部署到测试服务器时,测试服务器都会获取内容副本,每次开发迭代通常会执行几次。持续集成测试不应该依赖于普通内容编辑器可编辑的内容,但这些测试应该在每次运行时从头开始创建测试内容作为测试套件的一部分。
然后,您还需要一个临时服务器,该服务器是进行内容编辑的服务器。它在每次开发迭代时接收软件更新,或者当编辑者批准测试服务器上的功能时。在此服务器上,内容编辑已完成,您为此站点提供了单独的测试套件,测试内容的完整性,包括为损坏的链接运行报告等。一旦主编对内容更改感到满意,并且内容测试通过,然后将内容部署到生产服务器并公开。测试既可以按需进行,也可以定期进行,例如每天一次。
这种类型的设置当然只适用于您拥有许多内容编辑器的大型网站,可能是十个或更多。但在这些情况下,它绝对有意义。在较小的情况下,您可以摆脱登台服务器并将功能直接部署到生产服务器,并每晚运行一次内容测试,以便合理地快速捕获错误。
答案 1 :(得分:1)
在Plone中,可以通过GenericSetup mechanishm(自定义格式XML文件)部署数据库更改补丁。
当您安装新版本的插件时,您可以将版本控制系统中的代码捆绑在一起的可迁移设置作为GenericSetup文件。在服务器上安装代码后,Plone已重新启动,从Plone控制面板重新安装/升级您的插件。这将从XML文件中读取所有数据库更改,执行自定义Python脚本更改并修改站点数据库以获取新的插件版本。
但是,这意味着您必须在GenericSetup XML文件中提供所有更改,而不是直接在站点上进行更改。 Plone提供了一些导出工具,可以通过网络对XML进行更改,但支持非常糟糕。