Cloud Deploy 发布版本包含多个阶段。阶段是发布中要执行的作业的有序逻辑分组。
每个阶段都包含作业,这些作业是每个阶段要执行的操作(例如 deploy
或 verify
)。每个作业可以有零个或多个作业运行。
作业运行是指作业的实例。如果作业尚未运行,则没有作业运行。
发布结构
发布作业是一种 Cloud Deploy 资源,用于将版本与目标相关联。
阶段
发布包含一个或多个阶段。
对于标准部署策略,只有一个阶段:stable
。
对于灰度发布部署策略,每个配置的百分比都有一个单独的阶段。例如,如果您配置的金丝雀部署比例为 25%、50% 和 100%,则会分为三个阶段:
canary-25
canary-50
stable
这些阶段名称是标准名称:canary-[PERCENTAGE]
表示 Canary 阶段,stable
表示 100% 阶段。不过,如果您配置自定义自动 Canary 或自定义 Canary,则可以控制阶段名称。
作业和作业运行
每个发布阶段都包含一个或多个作业。
对于采用标准部署策略且未启用部署验证的发布,只有一个阶段 (stable
)。
对于 Canary 版发布,Canary 版的每个部分(例如 canary-25
、canary-50
、stable
)都会有一个阶段,并且每个阶段都有一个 deploy
作业。如果启用了验证,则每个阶段还会有一个 verify
作业。
作业运行是指作业的实例。例如,如果执行了 deploy
作业的作业运行,并且该作业运行成功,则不会再为该作业执行其他作业运行。如果失败,可以作为另一个作业运行进行重试。
首次跳过阶段
某些部署策略(例如 Canary)会在旧版本和新版本之间分配流量。如果您是首次部署到目标平台,则没有旧版本,因此我们无法分配流量。
因此,当您首次部署 Canary 版本时,我们会跳过 Canary 阶段,直接运行 stable
阶段。之后,应用会部署完毕,未来的 Canary 部署将包含 Canary 阶段。
在实际情况下,您通常会执行应用已在运行的 Canary 部署,因此很少会跳过此阶段。
发布作业中的状态
发布、阶段、作业和作业运行都有状态。本部分介绍了每种状态。
发布状态
发布版本会处于以下状态之一:
APPROVAL_REJECTED
发布需要审批,但审批被拒绝。
CANCELLED
用户取消的发布版本的最终状态。
CANCELLING
用户已取消发布,但取消操作尚未完成处理。
HALTED
在并行部署中,如果一项或多项子发布失败,但至少有一项子发布成功,则如果当前阶段之后还有其他阶段,控制器发布会暂停。
您可以通过执行以下任一操作来恢复已暂停的控制器发布作业:
取消控制器发布
重试或忽略子发布中的所有失败作业
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 部署策略,请参阅如何管理并行 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
。
终止作业运行后,系统会将该作业视为失败,您可以执行以下任一操作:
- 保持这种状态,并忽略失败的发布作业
- 重试作业
- 忽略作业,并继续执行发布中的下一个作业或阶段
忽略作业
您可以忽略失败的作业,并立即继续执行阶段中的下一个作业。该作业可能因任何原因而失败,包括您或其他用户终止了该作业的运行。
作业失败意味着阶段失败和发布失败。不过,如果您忽略失败,阶段和发布都可以继续推进,最终可以达到 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 服务架构文档。