Umbraco部署,是否可以回滚已发布的内容?

3
在Umbraco Deploy中,是否可以发布(促进内容和模板并在目标环境中发布),然后使用Umbraco Deploy完全回滚更改?(如果检测到某些危机)
我是指本地Umbraco安装(版本8及以上)
这不是有关还原(从生产环境拉取内容到开发环境)的问题,而是希望在生产环境中完全撤销推广(内容部署)操作,
如果答案是否定的,则是否有第三方产品知道如何完成此操作?

2
所有內容都內建了回滾功能,因此您需要登錄並手動執行。不確定Deploy或其他類似工具是否可以回滾,但我認為不行 :-/ - Jannik Anker
谢谢,但我正在寻找类似批处理的操作(一次性执行操作),并且需要从DevOps执行(而不是手动从UI执行)。 - flyWithMe
3个回答

3
Umbraco的回滚功能不够精细,无法区分“这个特定的值更改是由管理员/系统完成的,另一个值更改是由编辑完成的”。它会将整个节点保存/发布为一个“版本”。如果您想在X个节点上发布更改,然后稍后要回滚这些更改,那么谁知道任何受影响节点上有多少新版本存在?因此,您不能只回滚一个版本,您需要以某种方式对其进行时间戳。然后,您可能会删除仅存在于您要回滚的环境中的内容。因此,即使您自己以高度模块化的方式构建内容,其中所有“页面”都是通过选择可重用的“组件”来构建的,然后通过Deploy或其他工具发布,也没有内置到这些工具中允许您回滚版本的任何东西。至少我不知道有这样的功能。

通过 API 控制器,这个部分应该不难实现。您可以调用一个带有节点 ID 列表和时间戳的端点。然后对于每个节点,您需要删除比时间戳值更新的版本 (https://apidocs.umbraco.com/v9/csharp/api/Umbraco.Cms.Core.Services.IContentService.html#Umbraco_Cms_Core_Services_IContentService_DeleteVersions_System_Int32_DateTime_System_Int32_)。但它仍然需要一个相当特殊的内容结构 :-/。


2
非常感谢您详细的解释,我将尝试使用您提到的API解决方案。但是,由于删除只是“单向”的,是否可能使用API以某种方式“取消删除”版本,比如仅导出/导入到该节点(这样我就可以根据需要应用所需的内容版本)? - flyWithMe
嗯...也许如果你获取了所有的节点版本,并确定自己应该回滚到哪个版本(按日期),你就可以通过https://apidocs.umbraco.com/v9/csharp/api/Umbraco.Cms.Core.Services.IContentService.html#Umbraco_Cms_Core_Services_IContentService_Rollback_System_Int32_System_Int32_System_String_System_Int32_直接回滚到所述版本?可能是错误的,但我认为这将创建一个带有旧内容的*新*版本?因此不会删除任何东西? - Jannik Anker
@flyWithMe 我很好奇 - 你成功了吗? :-) - Jannik Anker

1

在部署之前备份Umbraco数据库,如果需要回滚,则恢复备份。如果使用DevOps,则其余内容(媒体,模板等)都在代码部署中,您可以轻松回滚。

这是最好的方法,几乎是唯一的方法!


还原操作会忽略随时间发生的运行时更改,而完全还原则不允许单独的更改被回滚,难道没有更模块化的方式吗? - flyWithMe
我原以为会有内容冻结。 - wingyip
首先感谢您的回答,内容冻结可能会在推广之前发生在源环境中,但我希望有一些工件,可以重新运行以使某些内容对象返回到其先前的状态/版本。 - flyWithMe

1

你看过uSync Complete了吗?


1
我不认为uSync可以回滚内容 :-/ - Jannik Anker
是的,我有这个问题,不幸的是它无法促进单个内容项目,并且我还没有看到回滚选项。 - flyWithMe
uSync Complete(付费版本)可以促进单个项目。 - wingyip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接