1

任何人都可以就以下问题提供任何指示,基本上我们使用的是 CMS(目前是 Drupal),并且所有更改都由网站的编辑在生产中进行,这意味着我们的 Dev/QE/Stage 环境总是不同步生产即在其后面而不是在前面。显然,为了实现持续集成/交付,这不能继续。

有几种方法可以解决这个问题,其中之一是拥有一个不在生产环境中的“黄金”环境,所有编辑更改等都会发生,然后将其推进到 QE/Stage,然后到 Prod ie…</p >

开发 -> 黄金 -> 量化宽松 -> 阶段 -> 生产

通过这种方式,我们可以随时了解生产中的内容,我们可以将其锁定等,并且我们拥有一个最新的 QE 环境,其中包含将要推送的内容。

问题是,在 Drupal 中执行此操作看起来会涉及大量复杂性,因为配置存储在数据库中,编辑器可以进行我们无法真正控制的更改,我们需要构建或安装一堆模块为了有效地“区分”数据库并推动 SQL 脚本向前推进,我在这里很容易出现一些尖叫错误,我不愿意开始编写工具来做到这一点。

任何人都可以指出任何 CMS 的任何资源,我们不依赖于 Drupal,事实上,如果它解决了这个问题或者至少让它变得非常容易,一个更简单的 CMS 会吸引我们很多。

4

2 回答 2

2

许多CMS的一个特点是配置部分存储在数据库中,这模糊了什么是开发、什么是配置和什么是内容编辑之间的界限。这在很大程度上是 CMS 灵活性的影响,这是可取的,因为它由站点决定。

但是,如果您没有在您的站点中创建这样的区别,则意味着您的所有内容编辑器都需要精通 CMS 的所有细节,因为他们可以更改配置,甚至在某些 CMS 中,例如 Plone,也可以通过-网。

因此,您需要确保每个人仅有权更改他们需要更改的内容。这反过来又需要一个高度灵活和详细的权限系统,比如 Plone 的。

在这方面存在问题的典型站点的一个示例是,您从一两个同时也是管理员的内容编辑者开始,他们使用具有完全权限的帐户,通常他们使用管理员帐户进行内容编辑。当更多的内容编辑者到达时,他们只是被赋予管理员密码来做一个小的改变,然后成长为拥有更多的编辑职责,但继续使用管理员帐户。结果,编辑网站的每个人都可以做任何事情,而您甚至看不到后来是谁进行了更改。

在管理良好的站点中,内容编辑器无法编辑或更改站点运行所需的任何内容。假设您有一个包含产品类别的网站,其中每个类别还需要一个概览文档,那么编辑不应该有权删除概览文档,因为这样做会破坏所有小类别链接。您将需要确定编辑/管理角色(可能有很多)并确保每个角色都具有所需的权限,然后将角色分配给帐户。

如果您最终处于难以授予权限并且编辑者往往拥有的权限太少或太多的情况,这表明您未能正确地将内容与网站开发分开,并且可能需要考虑重组一些代码和/或内容。这当然会在没有详细许可系统的简单 CMS 上更快地发生,这可能表明您已经超越了系统(这将我们带到了 Plone IMO 的主要销售点:作为 CMS,您极不可能超越它,虽然它仍然很容易上手)。


您似乎想要对完成的网站进行持续集成测试,包括它的内容。这既是一个好主意,也是一个坏主意。首先不好:

我认为对内容进行持续集成测试是不可行的,而且有点误导。如果您允许编辑者在实时站点上编辑测试过的内容,这也是完全不可能的,因为他们可以随时随意破坏它,见上文。

但是对完成的站点进行测试并不一定是一个坏主意。不过,我不会将它作为持续集成测试的一部分。这是因为这些测试通常由代码更改触发。

我的建议是将设置分为开发和编辑。开发环境是本地开发服务器和持续集成设置的正常环境,加上编辑器可以测试新功能的测试服务器。

每次部署到测试服务器时,测试服务器都会获取内容副本,这通常会在每次开发迭代中完成几次。持续集成测试不应该有依赖于普通内容编辑器可编辑内容的测试,但是这些测试应该在每次运行时从头开始创建测试内容,作为测试套件的一部分。

然后,您还需要一个登台服务器,这是在其上完成内容编辑的服务器。它在每次开发迭代或编辑批准测试服务器上的功能时接收一次软件更新。在这台服务器上,完成了内容编辑,并且您有一个单独的测试套件用于该站点,测试内容的完整性,包括运行断开链接的报告等。一旦主编对内容更改感到满意,并且内容测试通过,然后将内容部署到生产服务器并公开。测试可以按需进行,也可以定期进行,比如每天一次。

当然,这种类型的设置只适用于拥有许多内容编辑器(可能有十个或更多)的大型网站。但在这些情况下,这绝对是有道理的。在较小的情况下,您可以摆脱临时服务器并将功能直接部署到生产服务器,并每晚运行一次内容测试以合理地快速捕获错误。

于 2013-07-29T07:59:08.840 回答
1

在 Plone 中,可以通过GenericSetup mechanishm(自定义格式的 XML 文件)部署数据库更改补丁。

当您安装新版本的插件时,您可以将可迁移的设置与版本控制系统中的代码捆绑在一起,作为 GenericSetup 文件。在服务器上安装代码后,Plone 已重新启动,您可以从 Plone 控制面板重新安装/升级您的插件。这会从 XML 文件中读取所有数据库更改,执行自定义 Python 脚本更改并修改站点数据库以获取新的插件版本。

但是,这意味着您必须在 GenericSetup XML 文件中提供所有更改,而不是直接在站点上进行。Plone 提供了一些导出工具来通过 Web 将更改导出到 XML,但支持非常糟糕。

于 2013-07-27T08:34:41.720 回答