管理發布作業

Cloud Deploy 推出作業包含多個階段。階段是指在推行期間要執行的工作,並以有序的方式邏輯分組。

每個階段都包含工作,也就是在各階段中要採取的動作 (例如 deployverify)。每個工作可以有零個或多個工作執行作業。工作執行是工作例項。如果工作尚未執行,則不會有任何工作執行。

本文件說明階段工作工作執行階段,以及如何管理這些項目。

推出作業的結構

推出作業是一種 Cloud Deploy 資源,可將版本目標建立關聯。

階段

每個推行計畫都包含一或多個階段

對於標準部署策略,只有一個階段:stable

對於測試群組部署策略,每個設定百分比都有個別的階段。舉例來說,如果您設定 Canary 部署 25%、50% 和 100% 的用戶,就會有三個階段:

  • canary-25
  • canary-50
  • stable

這些階段名稱是標準名稱:canary-[PERCENTAGE] 代表 Canary 階段,stable 代表 100% 階段。不過,如果您設定手動自訂 Canary,則可以控制階段名稱。

工作和工作執行作業

每個推出階段都包含一或多個工作。

如果是採用標準部署策略,且未啟用部署驗證,則只有一個階段 (stable)。

對於初期測試版本推出作業,每個初期測試版本的部分 (例如 canary-25canary-50stable) 都會有一個階段,而每個階段都有一個 deploy 工作。如果啟用驗證功能,每個階段也會有 verify 工作。

工作執行是工作例項。舉例來說,如果系統執行 deploy 工作的工作執行作業,且該作業成功執行,則該工作就不會再執行其他工作。如果失敗,則可在其他工作執行時重試。

首次略過階段

部分部署策略 (例如初期測試版本) 會在舊版和新版之間分配流量。如果您是首次將應用程式部署至目標,就沒有舊版,因此我們無法分配流量。

因此,當您首次部署 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

    執行初期測試版等部署策略時,如果尚未有可用於分流流量的應用程式執行版本,Cloud Deploy 會跳到 stable 階段。在這種情況下,狀態會設為 SKIPPED

工作狀態

工作會處於下列其中一種狀態:

  • ABORTED

    如果某個階段失敗,後續階段就會中止。

    如果工作失敗,且該失敗狀況未忽略,後續工作就會中止。舉例來說,如果階段包含部署工作和驗證工作,而部署工作失敗,則系統會中止驗證工作。

  • DISABLED

    某些階段中的部分工作可能會停用。舉例來說,無論是否已啟用驗證,階段一律都會包含驗證工作。如果啟用驗證功能,則驗證工作會設為 DISABLED

  • FAILED

    這項工作的執行作業失敗,且使用者未選擇忽略失敗

    使用者選擇終止這項工作的執行作業

  • IGNORED

    這項工作的執行作業失敗,使用者選擇忽略失敗

  • IN_PROGRESS

    這項工作的執行作業目前正在執行。

  • PENDING

    由於其他階段或工作尚未完成,因此這項工作的執行作業正在等待開始。

  • SKIPPED

    執行初期測試版等部署策略時,如果尚未有可用於分流流量的應用程式執行版本,Cloud Deploy 會跳到 stable 階段。在這種情況下,系統會將略過階段內的工作狀態設為 SKIPPED

  • SUCCEEDED

    工作執行作業已順利完成,且該階段的下一個工作已開始,或是下一個階段已開始或準備開始 (可能會等待使用者輸入),或是推出作業已完成。

工作執行作業狀態

  • FAILED

    工作執行期間發生錯誤。

  • IN_PROGRESS

    工作已開始執行,但尚未完成。

  • TERMINATED

    使用者終止工作執行

  • TERMINATING

    使用者終止工作執行,但尚未完成終止作業。

  • SUCCEEDED

    如果工作執行作業順利完成,且未發生失敗或遭使用者終止,系統就會將工作置於 SUCCEEDED 狀態,

管理發布作業

您可以使用 Google Cloud 控制台或 Google Cloud SDK,透過 Cloud Deploy 推播執行下列操作:

如果您要使用並行部署功能搭配初期測試部署策略,請參閱這份文件

進展至下一個推出階段

如果指定目標使用的是「標準」以外的部署策略,您需要逐階段推行。

舉例來說,如果您設定目標要執行簡單的初期測試部署作業,且只採用 50% 和 stable (100%) 階段,就必須將推出作業提前一次,從 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. 按一下推送管道清單中顯示的管道。

    「Delivery pipeline details」(提交管道詳細資料) 頁面會以圖形呈現提交管道的進度。

  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. 按一下推送管道清單中顯示的管道。

    「Delivery pipeline details」(提交管道詳細資料) 頁面會以圖形呈現提交管道的進度。

  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)。如要查看工作執行 ID,請前往 Google Cloud 控制台 (針對 Cloud Deploy) 的推出頁面:

在 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. 按一下推送管道清單中顯示的管道。

    「Delivery pipeline details」頁面會以圖表呈現推送管道的進度。

  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 控制台的階段表格,其中顯示失敗的工作執行

PHASE_ID 是包含您要略過的工作的階段名稱。

REGION 是建立版本的區域名稱,例如 us-central1

如要進一步瞭解 gcloud deploy rollouts ignore-job 指令,請參閱 Google Cloud SDK 參考資料。

主控台

  1. 開啟「推送管道」頁面

  2. 按一下推送管道清單中顯示的管道。

    「Delivery pipeline details」頁面會以圖表呈現推送管道的進度。

  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. 按一下推送管道清單中顯示的管道。

    「Delivery pipeline details」頁面會以圖表呈現推送管道的進度。

  3. 在「Rollouts」分頁標籤的「Delivery pipeline details」下方,按一下推出作業的名稱。

    系統會顯示該推出作業的詳細資料頁面。

  4. 在「階段和工作」下方,按一下包含要重試的工作的階段。

  5. 選取要重試的工作。

  6. 按一下「重試」並確認。

    在 Google Cloud 控制台查看推出作業詳細資料

    再次執行工作,工作狀態會顯示為「進行中」,如階段表格所示。如果同個階段中有其他工作,則會執行這些工作。否則,推出作業即可進展至下一個階段。

後續步驟