管理发布

Cloud Deploy 发布包含多个阶段。阶段是对发布过程中要执行的作业的有序逻辑分组。

每个阶段都包含作业,即每个阶段要执行的操作(例如 deployverify)。每项作业可以有零个或多个作业运行。作业运行是作业的实例。如果作业尚未运行,则没有作业运行记录。

本文档介绍了阶段作业作业运行,以及如何管理它们。

发布结构

发布作业是一种 Cloud Deploy 资源,用于将版本目标相关联。

阶段

发布活动由一个或多个阶段组成。

对于标准部署策略,只有一个阶段:stable

对于Canary 版部署策略,每个配置百分比都有单独的阶段。例如,如果您配置的 Canary 版本按 25%、50%、100% 的比例部署,则会分为三个阶段:

  • canary-25
  • canary-50
  • stable

这些阶段名称是标准的:canary-[PERCENTAGE] 表示 Canary 阶段,stable 表示 100% 阶段。不过,如果您配置的是手动自定义 Canary 版,则可以控制阶段名称。

作业和作业运行

每个发布阶段都包含一个或多个作业。

对于标准部署策略中的发布(未启用部署验证),只有一个阶段 (stable)。

对于 Canary 版发布,Canary 版的每个部分(例如 canary-25canary-50stable)都有一个阶段,每个阶段都有一个 deploy 作业。如果启用了验证,每个阶段还会有一个 verify 作业。

作业运行是作业的实例。例如,系统会执行为 deploy 作业运行的作业,如果该作业成功,则不会为该作业运行其他作业。如果失败,可以在其他作业运行时重试。

首次跳过阶段

某些部署策略(例如 Canary 版)会在旧版和新版之间分配流量。如果您是首次部署到目标平台,则没有旧版本,因此我们无法分配流量。

因此,当您首次部署 Canary 时,我们会跳过 Canary 阶段或阶段,并运行 stable 阶段。之后,系统会部署应用,并且未来的 Canary 部署将包含 Canary 阶段。

在实际情况下,您通常会在应用已在运行的情况下执行 Canary 部署,因此这种跳过阶段的情况很少见。

发布作业中的状态

发布、阶段、作业和作业运行都有状态。本部分介绍了每种状态。

发布状态

发布会处于以下状态之一:

  • APPROVAL_REJECTED

    此发布需要审批,但审批遭拒。

  • CANCELLED

    由用户取消的发布的终端状态。

  • CANCELLING

    用户已取消发布,但取消操作尚未处理完毕。

  • HALTED

    并行部署中,如果一项或多项子发布失败,但至少有一项子发布成功,则如果当前阶段后面还有更多阶段,控制器发布会被暂停。

    您可以通过执行以下任一操作来恢复已暂停的控制器发布作业:

    • 取消控制器发布

    • 重试或忽略子发布中的所有失败作业

  • IN_PROGRESS

    作业运行正在处理中。

  • FAILED

    作业失败,并且用户未选择忽略失败

  • PENDING

    发布尚未开始处理。此状态会转换为 IN_PROGRESSCANCELED

  • 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 参考文档。

控制台

  1. 打开“交付流水线”页面

  2. 点击交付流水线列表中显示的流水线。

    交付流水线详情页面显示交付流水线进展的图形表示。

  3. 发布标签页的交付流水线详情下,点击相应发布的名称。

    系统会显示相应发布的详情页面。

    Google Cloud 控制台中的发布详细信息

    请注意,在此示例中,发布有 canary-50 阶段和 stable 阶段。您的发布可能包含更多阶段或不同的阶段。

  4. 点击推进发布

    发布作业会推进到下一阶段。

取消发布

您可以取消任何尚未完成的发布。您还可以取消失败的发布,以防止对其执行进一步操作(例如忽略或重试)。该发布版本必须处于以下任一状态:

  • 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 参考文档。

控制台

  1. 打开“交付流水线”页面

  2. 点击交付流水线列表中显示的流水线。

    交付流水线详情页面显示交付流水线进展的图形表示。

  3. 发布标签页的交付流水线详情下,点击相应发布的名称。

    系统会显示相应发布的详情页面。

    Google Cloud 控制台中的发布详细信息

    请注意,在此示例中,发布有 canary-50 阶段和 stable 阶段。您的发布可能包含更多阶段或不同的阶段。

  4. 点击取消发布

    发布已取消。

终止作业运行

您可以结束当前正在运行的作业。例如,如果作业运行时间似乎过长或未按预期运行,您可能需要执行此操作。作业运行状态必须为 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:

Google Cloud 控制台中发布详情中的作业运行 ID

您还可以使用 gcloud deploy rollouts describe 命令获取作业运行 ID。

RELEASE_NAME 是此作业运行所属的版本的名称。

PIPELINE_NAME 是用于管理此版本部署的交付流水线的名称。

ROLLOUT_NAME 是此作业所属的发布版本的名称。

REGION 是创建版本所在区域的名称,例如 us-central1。这是必填项。

如需详细了解 gcloud deploy job-runs terminate 命令,请参阅 Google Cloud SDK 参考文档。

控制台

  1. 打开“交付流水线”页面

  2. 点击交付流水线列表中显示的流水线。

    交付流水线详情页面显示交付流水线进展的图形表示。

  3. 发布标签页的交付流水线详情下,点击相应发布的名称。

    系统会显示相应发布的详情页面。

    Google Cloud 控制台中的发布详细信息

    请注意,在此示例中,发布有 canary-50 阶段和 stable 阶段。您的发布可能包含更多或不同的阶段。

  4. 阶段下,点击包含您要终止的作业的相应阶段。

  5. 作业运行下,选择要终止的具体作业运行,然后点击终止

    作业运行会终止,并且作业状态(如阶段表中所示)为 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 控制台中的部署阶段表格中找到作业名称:

Google Cloud 控制台中的“Phases”表,其中显示了运行失败的作业

PHASE_ID 是包含要忽略的作业的相应阶段的名称。

REGION 是创建版本所在区域的名称,例如 us-central1

如需详细了解 gcloud deploy rollouts ignore-job 命令,请参阅 Google Cloud SDK 参考文档。

控制台

  1. 打开“交付流水线”页面

  2. 点击交付流水线列表中显示的流水线。

    交付流水线详情页面显示交付流水线进展的图形表示。

  3. 发布标签页的交付流水线详情下,点击相应发布的名称。

    系统会显示相应发布的详情页面。

  4. 选择要忽略的失败作业。

  5. 点击忽略失败情况按钮。

    系统会忽略失败的作业运行,并继续发布,就像作业已成功一样。也就是说,如果同一阶段还有其他作业,则系统会执行这些作业。否则,发布作业就可以推进到下一阶段。

Google Cloud 控制台中已失败且可以忽略的作业

重试失败的作业

您可以重试失败的作业运行。作业可能会因以下任一原因而失败:

  • 作业运行未能完成。

    例如,可能存在权限问题。

  • 用户终止了作业运行

    终止作业运行会导致作业失败,您可以重试。

  • 验证测试失败。

    验证作业的验证测试失败。虽然验证作业已正确完成,但您的一个验证测试失败了,我们会将该失败结果传播回验证作业。在这种情况下,您需要重试作业,以便调试针对应用的失败测试。

如需重试失败的作业,请执行以下操作:

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-50stable

REGION 是创建版本所在区域的名称,例如 us-central1。这是必填项。

如需详细了解 gcloud deploy rollouts retry-job 命令,请参阅 Google Cloud SDK 参考文档。

控制台

  1. 打开“交付流水线”页面

  2. 点击交付流水线列表中显示的流水线。

    交付流水线详情页面显示交付流水线进展的图形表示。

  3. 发布版本标签页的交付流水线详情下,点击相应发布版本的名称。

    系统会显示相应发布的详情页面。

  4. 阶段和作业下,点击包含要重试的作业的相应阶段。

  5. 选择要重试的作业。

  6. 点击重试,然后进行确认。

    Google Cloud 控制台中的发布详细信息

    系统会再次执行作业运行,并且作业状态(如阶段表中所示)为“进行中”。如果同一阶段还有其他作业,系统会执行这些作业。否则,发布作业就可以推进到下一阶段。

后续步骤