Cloud Deploy 的发布包含多个阶段。阶段是对发布中要执行的作业进行有序的逻辑分组。
每个阶段都包含作业,即要在每个阶段执行的操作(例如 deploy
或 verify
)。每个作业可以有零个或零个以上的作业运行。作业运行是作业的一个实例。如果作业未运行,则不会运行任何作业。
发布作业的结构
发布是一种 Cloud Deploy 资源,用于将版本与目标相关联。
阶段
对于标准部署策略,只有一个阶段:stable
。
对于 Canary 部署策略,每个配置的百分比都有一个单独的阶段。例如,如果您配置的 Canary 先部署 25%,然后是 50%,最后是 100%,则将分三个阶段:
canary-25
canary-50
stable
这些阶段名称是标准的:canary-[PERCENTAGE]
表示 Canary 阶段,stable
表示 100% 阶段。但是,如果您配置手动或自定义 Canary,则可以控制阶段名称。
作业和作业运行
每个发布阶段都包含一个或多个作业。
对于未启用部署验证的标准部署策略中的发布,会有一个阶段 (stable
)。
对于 Canary 发布,Canary 版的每个部分(例如 canary-25
、canary-50
、stable
)都有一个阶段,并且每个阶段都有一个 deploy
作业。如果启用了验证,则每个阶段还有 verify
作业。
作业运行是作业的一个实例。例如,系统为 deploy
作业执行了运行作业,如果成功,就不会再为该作业运行作业。如果失败,可重新尝试运行该作业。
首次跳过阶段
一些部署策略(例如 Canary 版)会在旧版本和新版本之间分配流量。如果您是首次部署到目标,则没有旧版本,因此我们无法分配流量。
因此,当您首次部署 Canary 时,我们会跳过 Canary 阶段或多个阶段并运行 stable
阶段。之后,应用会被部署,未来的 Canary 部署将包含 Canary 阶段。
在实际情况中,您通常需要在您的应用已经运行的情况下执行 Canary 部署,因此这一阶段跳过这一阶段的情况很少见。
发布作业中的状态
发布、阶段、作业和作业运行都有状态。本部分介绍了它们的状态。
发布状态
发布会具有下列状态之一:
APPROVAL_REJECTED
发布需要批准,但批准遭到了拒绝。
CANCELLED
用户已取消发布时的终止状态。
CANCELLING
用户已取消发布,但尚未完成取消处理。
HALTED
在并行部署中,如果一个或多个子发布失败,但至少有一个子发布成功,则如果当前发布之后还有其他阶段,则控制器发布会处于 HAL 状态。
您可以通过执行以下任一操作来恢复已暂停的控制器发布:
取消控制器发布
在子发布时重试或忽略任何失败的作业
IN_PROGRESS
正在处理作业运行。
FAILED
作业失败,用户未选择忽略失败。
PENDING
发布尚未开始处理。此状态转换为
IN_PROGRESS
或CANCELED
。PENDING_APPROVAL
发布需要批准,但尚未获得批准。
PENDING_RELEASE
发布正在等待呈现版本。
SUCCEEDED
发布已完成,未出现任何错误。
阶段状态
阶段会具有以下状态之一:
PENDING
此阶段正在等待发布的另一个阶段结束。
IN_PROGRESS
该阶段已开始。
SUCCEEDED
该阶段已成功完成。
FAILED
该阶段的作业失败,用户未选择忽略失败。
ABORTED
前一阶段失败。
SKIPPED
当您运行 Canary 等部署策略时,如果还没有用于拆分流量的应用的运行版本,则 Cloud Deploy 会跳至
stable
阶段。在这种情况下,状态设置为SKIPPED
。
作业状态
作业将处于以下状态之一:
ABORTED
如果某个阶段失败,则后续阶段会取消。
如果作业失败,并且未忽略失败的作业,则后续作业将取消。例如,如果某个阶段包含部署作业和验证作业,并且部署作业失败,则验证作业将会取消。
DISABLED
某一阶段中的某些作业可能会被停用。例如,无论是否启用了验证,阶段始终包括验证作业。如果验证未启用,则验证作业会设置为
DISABLED
。FAILED
此作业运行失败,且用户未选择忽略失败。
用户选择了终止此作业的作业运行。
IGNORED
此作业运行失败,用户选择忽略失败。
IN_PROGRESS
此作业运行的作业目前正在运行。
PENDING
此作业的运行作业正在等待开始,因为其他阶段或作业尚未完成。
SKIPPED
当您运行 Canary 等部署策略时,如果还没有用于拆分流量的应用的运行版本,则 Cloud Deploy 会跳至
stable
阶段。在这种情况下,跳过的阶段中的作业状态会设置为SKIPPED
。SUCCEEDED
作业运行成功完成,该阶段中的下一个作业已开始,或者下一个阶段已经开始或准备好开始(可能正在等待用户输入),或者发布已完成。
作业运行状态
FAILED
执行期间作业运行失败。
IN_PROGRESS
作业已开始运行,但尚未完成。
TERMINATED
用户终止了作业运行。
TERMINATING
用户终止了作业运行,但尚未终止。
SUCCEEDED
如果作业运行成功完成,没有失败或被用户终止,则会进入
SUCCEEDED
状态,
管理发布
使用 Google Cloud 控制台或 Google Cloud SDK,您可以通过 Cloud Deploy 发布执行以下操作:
如果您将并行部署与 Canary 部署策略结合使用,请参阅此文档。
推进发布
对于配置为使用“标准”以外的部署策略的目标,您需要将发布阶段推进到阶段。
例如,如果您的目标配置为仅执行包含 50% 和 stable
(100%) 阶段的简单 Canary 部署,则您需要将发布从 canary-50
阶段推进到 stable
(100%) 阶段一次。
gcloud
gcloud deploy rollouts advance ROLLOUT_NAME \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION
其中:
ROLLOUT_NAME
是要推进到下一阶段的当前发布的名称。
RELEASE_NAME
是此发布所属的版本的名称。
PIPELINE_NAME
是用于管理此版本部署的交付流水线的名称。
REGION
是创建版本的区域的名称,例如 us-central1
。这是必填项。
如需详细了解 gcloud deploy rollouts advance
命令,请参阅 Google Cloud SDK 参考文档。
控制台
点击交付流水线列表中显示的流水线。
交付流水线详情页面显示交付流水线进展的图形表示。
在发布标签页的交付流水线详情下,点击发布的名称。
系统即会显示该发布的发布详情页面。
请注意,在此示例中,发布有一个
canary-50
阶段和一个stable
阶段。您的发布可能会包含更多阶段或不同阶段。点击推进发布。
发布已推进到下一阶段。
取消发布
您可以取消任何尚未完成的发布。您还可以取消失败的发布,以防对其执行进一步操作(例如忽略或重试)。发布必须处于以下状态之一:
FAILED
HALTED
IN_PROGRESS
PENDING
PENDING_APPROVAL
PENDING_RELEASE
取消发布作业后,该发布会处于 CANCELLING
状态,直到所有未完成的作业运行完成。您可以终止不想等待的未完成作业运行。发布状态一旦处于 CANCELLED
状态,便无法再推进或修改。
如需取消发布,请执行以下操作:
gcloud
gcloud deploy rollouts cancel ROLLOUT_NAME \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION
其中:
ROLLOUT_NAME
是要推进到下一阶段的当前发布的名称。
RELEASE_NAME
是此发布所属的版本的名称。
PIPELINE_NAME
是用于管理此版本部署的交付流水线的名称。
REGION
是创建版本的区域的名称,例如 us-central1
。这是必填项。
如需详细了解 gcloud deploy rollouts cancel
命令,请参阅 Google Cloud SDK 参考文档。
控制台
点击交付流水线列表中显示的流水线。
交付流水线详情页面显示交付流水线进展的图形表示。
在发布标签页的交付流水线详情下,点击发布的名称。
系统即会显示该发布的发布详情页面。
请注意,在此示例中,发布有一个
canary-50
阶段和一个stable
阶段。您的发布可能会包含更多阶段或不同阶段。点击取消发布。
已取消发布。
终止作业运行
您可以结束当前正在进行的作业运行。例如,如果作业运行似乎用时过长或未按预期运行,您可能就需要这样做。作业运行状态必须为 IN_PROGRESS
,您才能终止该作业。
gcloud
gcloud deploy job-runs terminate JOB_RUN_ID \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--rollout=ROLLOUT_NAME \
--region=REGION
其中:
JOB_RUN_ID
是要终止的作业运行作业的 (UUID)。您可以在 Google Cloud 控制台的发布页面上找到 Cloud Deploy 的作业运行 ID:
您还可以使用 gcloud deploy rollouts
describe
命令获取作业运行 ID。
RELEASE_NAME
是此作业运行所属的版本的名称。
PIPELINE_NAME
是用于管理此版本部署的交付流水线的名称。
ROLLOUT_NAME
是此作业运行所属的发布作业的名称。
REGION
是创建版本的区域的名称,例如 us-central1
。这是必填项。
如需详细了解 gcloud deploy job-runs terminate
命令,请参阅 Google Cloud SDK 参考文档。
控制台
点击交付流水线列表中显示的流水线。
交付流水线详情页面以图形方式展示交付流水线进度。
在发布标签页的交付流水线详情下,点击发布的名称。
系统即会显示该发布的发布详情页面。
请注意,在此示例中,发布有一个
canary-50
阶段和一个stable
阶段。您的发布可能会包含更多阶段或不同阶段。在阶段下,点击包含要终止其作业的作业的阶段。
在作业运行下,选择要终止的特定作业运行,然后点击终止。
作业运行会终止,且作业状态为
Failure
(如 Phases 表中所示)。
终止作业运行后,作业会被视为失败,您可以执行以下任一操作:
- 保持现状,忽略失败的发布
- 重试作业
- 忽略作业并继续执行发布中的下一个作业或阶段
忽略作业
您可以忽略失败的作业,并立即移至该阶段中的下一个作业。 该作业可能因任何原因失败,包括您或其他人终止了该作业的作业。
失败的作业表示阶段失败,且发布失败。但是,如果您忽略失败,则阶段和发布都可以推进,并且最终可能会具有 SUCCEEDED
状态。
gcloud
gcloud deploy rollouts ignore-job ROLLOUT_NAME \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--job-id=JOB_ID \
--phase-id=PHASE_ID \
--region=REGION
其中:
ROLLOUT_NAME
是此作业运行所属的发布作业的名称。
RELEASE_NAME
是包含此作业的当前版本的名称。
PIPELINE_NAME
是用于管理此版本部署的交付流水线的名称。
JOB_ID
是要忽略的作业的名称,例如 DEPLOY
。您可以在 Google Cloud 控制台中发布的阶段表中找到作业名称:
PHASE_ID
是包含要忽略的作业的阶段的名称。
REGION
是创建版本的区域的名称,例如 us-central1
。
如需详细了解 gcloud deploy rollouts ignore-job
命令,请参阅 Google Cloud SDK 参考文档。
控制台
点击交付流水线列表中显示的流水线。
交付流水线详情页面以图形方式展示交付流水线进度。
在发布标签页的交付流水线详情下,点击发布的名称。
系统即会显示该发布的发布详情页面。
选择要忽略的失败作业。
点击忽略失败按钮。
系统会忽略失败的作业运行,并且发布会继续,就像作业已成功一样。也就是说,如果同一阶段存在其他作业,则系统会执行这些作业。否则,发布已准备好进入下一阶段。
重试失败的作业
您可以重试运行失败的作业。作业可能会因以下任何原因而失败:
作业运行未能完成。
例如,可能存在权限失败问题。
用户从该作业中终止了作业运行。
终止作业运行会导致作业失败,您可以重试。
验证测试失败。
对于验证作业,验证测试失败。虽然验证作业已正确完成,但您的一项验证测试失败了,我们会将其传播回验证作业。在这种情况下,您要在针对应用调试失败的测试的过程中重试作业。
如需重试失败的作业,请执行以下操作:
gcloud
gcloud deploy rollouts retry-job JOB_NAME \
--release=RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--rollout=ROLLOUT_NAME \
--phase=PHASE_ID \
--region=REGION
其中:
JOB_NAME
是要重试的作业的名称。例如,如果您在验证失败后重试验证作业,这将为 verify
。
RELEASE_NAME
是此作业运行所属的版本的名称。
PIPELINE_NAME
是用于管理此版本部署的交付流水线的名称。
ROLLOUT_NAME
是此作业运行所属的发布作业的名称。
PHASE_ID
是此作业所属阶段的名称。例如,canary-50
或 stable
。
REGION
是创建版本的区域的名称,例如 us-central1
。这是必填项。
如需详细了解 gcloud deploy rollouts retry-job
命令,请参阅 Google Cloud SDK 参考文档。
控制台
点击交付流水线列表中显示的流水线。
交付流水线详情页面以图形方式展示交付流水线进度。
在发布标签页的交付流水线详情下,点击发布的名称。
系统即会显示该发布的发布详情页面。
在阶段和作业下,点击包含要重试作业的阶段。
选择要重试的作业。
点击重试并确认。
系统会再次执行作业,并且作业状态为“正在进行”(如阶段表中所示)。如果同一阶段还有其他作业,这些作业会被执行。否则,发布已准备好进入下一阶段。
后续步骤
详细了解 Cloud Deploy 中的部署策略的工作原理。
如需详细了解发布、阶段、作业和作业运行如何与 Cloud Deploy 的其余部分融为一体,请参阅 Cloud Deploy 服务架构文档。