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
在并行部署中,如果一项或多项子发布失败,但至少有一项子发布成功,则如果当前阶段后面还有更多阶段,控制器发布会被暂停。
您可以通过执行以下任一操作来恢复已暂停的控制器发布作业:
取消控制器发布
重试或忽略子发布中的所有失败作业
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 控制台中找到作业运行 ID,对于 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 服务架构文档。