Openshift 如何让回滚使用旧映像而不是停留在最新的(外部构建的)映像上?

Openshift 如何让回滚使用旧映像而不是停留在最新的(外部构建的)映像上?,openshift,rollback,openshift-client-tools,Openshift,Rollback,Openshift Client Tools,我们正在将构建过程移到OpenShift 3.11集群之外,并注意到当想要回滚到较旧的部署时,使用的docker映像不是旧的,而是OpenShift已知的最新的 我看到了由OpenShift源代码构建的图像,这是可行的,但对于我们的外部构建图像,它被推送到OpenShift外部docker注册表,然后oc new app registry/foo/bar:master(为其创建图像流),这是不可行的 这能实现吗 我的docker映像是否需要额外的元数据 我需要告诉OpenShift更多关于我的图

我们正在将构建过程移到OpenShift 3.11集群之外,并注意到当想要回滚到较旧的部署时,使用的docker映像不是旧的,而是OpenShift已知的最新的

我看到了由OpenShift源代码构建的图像,这是可行的,但对于我们的外部构建图像,它被推送到OpenShift外部docker注册表,然后
oc new app registry/foo/bar:master
(为其创建图像流),这是不可行的

这能实现吗

我的docker映像是否需要额外的元数据

我需要告诉OpenShift更多关于我的图像吗



注意:在Origin中打开-Redhat stuff下面的开源项目-关于此

要回滚到特定版本,只需指定版本,如果不指定部署版本,最新版本将自动回滚到

部署配置上的映像更改触发器被禁用,如下所示: 回滚的一部分,以防止在 回滚已完成。要重新启用图像更改触发器,请执行以下操作:

$oc部署--启用触发器
要回滚到特定版本,请执行以下操作:

$oc rollback--到版本=1

使用

当您使用名为
master
的标记对图像进行寻址时,我假设您当前使用的是可变标记,这些标记会随着每次图像构建而更新。这样,您就可以通过恢复提交并重新构建旧映像来“回滚”,但之后仍然会得到更新的基本映像和不同的元数据

如果您围绕不可变的标记设计整个发布过程,那么您完全可以做您想要做的事情。为此,请使用以下方法之一:

(1) 通过电子邮件地址您的图像。在这种情况下,您需要一个注册表来保存图像,即使它们没有标记。例如,Quay.io不保留未标记的图像,您只能提取最新版本。为了避免这种情况,只需添加一个伪标记,例如图像摘要

(2) 使用语义版本控制发布图像,例如使用并添加到构建管道中。确保您使用的基础映像也是不可变的。要将映像部署到我们的集群,请使用工作流和类似的工具。现在,您可以通过恢复GitOps repo中的提交来轻松回滚


(3) 重新考虑是否需要回滚。或者,您可以使用OpenShift 4附带的带Istio的canary部署。与其回滚,不如同时部署两个版本的应用程序,然后使用Istio将流量路由到其中一个版本,直到您满意为止。

您应该避免使用
master
作为图像标签版本,如果希望能够回滚到旧版本,请开始为每个映像生成使用唯一的版本号。@GrahamDumpleton我需要跟随一个标记。你是说我需要更多的标签吗?我正在查看GUI中的回滚按钮,对于由构建配置生成的图像,该按钮可以回滚到该特定图像,但是对于从外部注册表导入的图像,它似乎不这样做,而是使用最新的docker图像,这对我来说是一个错误。我们谈论的是同一件事吗?我想我们谈论的是同一件事,除了我直接从CLI调用命令外,您是否对单击GUI按钮时发生的情况有任何跟踪?从我读到的内容来看,您谈论的是部署描述符版本,这很有效!问题是,部署引用的映像流中的旧映像比旧的部署描述符回滚到时使用的映像要旧。类似于“部署2”,但使用“映像5”而不是“映像2”。@ThorbjørnRavnAndersen啊,好吧,所以拉错了映像。像这样的问题?看起来不像。不过,我会打开一个问题,看看这是否是一个bug。我们使用的是OpenShift外部docker注册表。我们也可以使用Habor实例。OpenShift 4不是一个选项。如果我理解正确,您基本上是说我需要手动(或使用非OpenShift工具)跟踪要部署的映像,因此手动部署它们,以便部署描述符包含我提供的唯一标记,回滚需要定位旧映像?OpenShift一次提供足够的提示就无法做到这一点吗?
足够的提示
只能是[]中提到的标签。它们包括我在(1)中提到的图像摘要。这些都创建好了吗?
oc rollback
有效吗?图像摘要标签还没有明确创建。不幸的是,在赏金用完之前,我没有时间进一步调查,så我已经出于诚意将其授予您,稍后我会回来。谢谢。
$ oc deploy <deployment_config> --enable-triggers