2.3.5.2. 可重复提升流程
在为您的管道进行另一个暂存环境的初始设置后,通过提升管道验证应用程序的每个迭代可以启动一组可重复的步骤。每次源环境中的镜像或 API 对象改变时会执行这些基本步骤:
移动更新的镜像
通常,第一步是将与应用程序关联的镜像的任何更新提升到管道中的下一阶段。如上面所述,提升镜像的关键差异化是 OpenShift Container Platform registry 是否在暂存环境间共享。
如果 registry 共享,则只利用
oc tag
:$ oc tag <project_for_stage_N>/<imagestream_name_for_stage_N>:<tag_for_stage_N> <project_for_stage_N+1>/<imagestream_name_for_stage_N+1>:<tag_for_stage_N+1>
如果没有共享 registry,您可以在登录到源和目标 registry 时利用每个提升管道 registry 的访问令牌,相应地拉取、标记和推送应用程序镜像:
登录到源环境 registry:
$ docker login -u <username> -e <any_email_address> -p <token_value> <src_env_registry_ip>:<port>
拉取应用程序的镜像:
$ docker pull <src_env_registry_ip>:<port>/<namespace>/<image name>:<tag>
将应用程序的镜像标记到目标 registry 的位置,根据需要更新命名空间、名称和标签,以符合目标暂存环境:
$ docker tag <src_env_registry_ip>:<port>/<namespace>/<image name>:<tag> <dest_env_registry_ip>:<port>/<namespace>/<image name>:<tag>
登录到目标暂存环境 registry:
$ docker login -u <username> -e <any_email_address> -p <token_value> <dest_env_registry_ip>:<port>
将镜像推送到其目的地:
$ docker push <dest_env_registry_ip>:<port>/<namespace>/<image name>:<tag>
提示要从外部 registry 自动导入镜像的新版本,
oc tag
命令有一个--scheduled
选项。如果使用,则ImageStreamTag
引用的镜像将定期从托管镜像的 registry 中拉取。
接下来,在有些情况下,应用程序的发展需要对您的 API 对象进行基本更改,或者从组成应用程序的 API 对象集合中移除。当应用程序 API 对象出现这种演变时,OpenShift Container Platform CLI 提供了广泛的选项来从一个暂存环境转移到下一个阶段。
从最初设置提升管道时启动的方式相同:
$ oc login <source_environment> $ oc project <source_project> $ oc get -o yaml --export dc,is,svc,route,secret,sa -l promotion-group=<application_name> > export.yaml $ oc login <target_environment> $ oc <target_project>
更新它们,而不是简单地在新环境中创建资源。您可以按照几种不同的方式实现:
更保守的方法是使用
oc apply
并合并对目标环境中每个 API 对象的新更改。要做到这一点,您可以在实际更改对象前--dry-run=true
选项并检查生成的对象:$ oc apply -f export.yaml --dry-run=true
如果满意,则实际运行
apply
命令:$ oc apply -f export.yaml
apply
命令可以选择使用额外的参数,以帮助实现更复杂的场景。如需了解更多详细信息,请参阅oc apply --help
。或者,更简单但更积极的方法是使用
oc replace
。没有使用此更新且替换的空运行。在最基本的形式中,这涉及执行:$ oc replace -f export.yaml
与
apply
一样,replace
(可选)为更复杂的行为采用附加参数。如需了解更多详细信息,请参阅oc replace --help
。
-
前面的步骤会自动处理引入的新 API 对象,但如果从源环境中删除 API 对象,必须使用
oc delete
从目标环境中手动删除它们。 对于任何 API 对象而言,可能需要调整环境变量,因为这些对象所需的值可能会在暂存环境之间有所不同。为此,请使用
oc set env
:$ oc set env <api_object_type>/<api_object_ID> <env_var_name>=<env_var_value>
-
最后,使用
oc rollout
命令或上方 Deployments 部分中讨论的其他机制之一来触发更新的应用程序的新部署。