管理發布作業

Cloud Deploy 的推出作業包含多個階段。階段是指在推出作業中要執行的工作,經過排序的邏輯分組。

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

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

推出作業的結構

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

階段

推出作業包含一或多個階段

如果是標準部署策略,只有一個階段:stable

如果是金絲雀部署策略,系統會為每個設定的百分比分別建立階段。舉例來說,如果您設定 Canary 部署 25%、50% 和 100%,則會有三個階段:

  • canary-25
  • canary-50
  • stable

這些階段名稱是標準名稱:canary-[PERCENTAGE] 代表 Canary 階段,stable 代表 100% 階段。不過,如果您設定自訂自動化初期測試或自訂初期測試,可以控管階段名稱。

工作和工作執行作業

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

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

如果是初期測試發布作業,初期測試的每個部分 (例如 canary-25canary-50stable) 都會對應一個階段,每個階段都會有 deploy 工作。如果啟用驗證,每個階段也會有 verify 工作。

工作執行是工作執行個體。舉例來說,如果 deploy 工作執行成功,該工作就不會再執行。如果失敗,可以做為另一個工作執行作業重試。

首次略過階段

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

因此,首次部署初期測試版時,我們會略過初期測試版階段,直接執行 stable 階段。之後,應用程式就會部署完成,而日後的 Canary 部署作業將包含 Canary 階段。

在實際情況中,您通常會執行 Canary 部署,應用程式已在執行中,因此很少會略過這個階段。

推出作業中的狀態

推出作業、階段、工作和工作執行都有狀態。本節將說明每個狀態。

推出作業狀態

推出作業會處於下列其中一種狀態:

  • APPROVAL_REJECTED

    推出作業需要核准,但核准遭拒。

  • CANCELLED

    使用者取消的推出作業的終端狀態。

  • CANCELLING

    使用者已取消推出作業,但取消程序尚未完成。

  • HALTED

    平行部署中,如果一或多項子項推出作業失敗,但至少有一項子項推出作業成功,則如果目前階段之後還有其他階段,控制器推出作業會 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. 在推送管道清單中,按一下您的管道。

    「推送 pipeline 詳細資料」頁面會以圖形顯示推送 pipeline 的進度。

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

    「推送 pipeline 詳細資料」頁面會以圖形顯示推送 pipeline 的進度。

  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 控制台的 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. 在推送管道清單中,按一下您的管道。

    「推送 pipeline 詳細資料」頁面會以圖形呈現推送 pipeline 的進度。

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

    「推送 pipeline 詳細資料」頁面會以圖形呈現推送 pipeline 的進度。

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

    「推送 pipeline 詳細資料」頁面會以圖形呈現推送 pipeline 的進度。

  3. 在「推出」分頁的「傳送管線詳細資料」下方,按一下推出作業的名稱。

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

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

  5. 選取要重試的工作。

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

     Google Cloud 控制台中的推出作業詳細資料

    系統會再次執行工作,且「階段」表格中顯示的工作狀態為「進行中」。如果同一階段還有其他工作,系統會執行這些工作。否則,推出作業即可進入下一階段。

後續步驟