Cloud Deploy 的推出作業包含多個階段。階段是指在推出作業中要執行的工作,經過排序的邏輯分組。
每個階段都包含工作,也就是各階段要採取的動作 (例如 deploy
或 verify
)。每項工作可以有零或多個工作執行作業。工作執行是工作執行個體。如果工作尚未執行,就不會有工作執行作業。
推出作業的結構
推出作業是 Cloud Deploy 資源,可將版本與目標建立關聯。
階段
推出作業包含一或多個階段。
如果是標準部署策略,只有一個階段:stable
。
如果是金絲雀部署策略,系統會為每個設定的百分比分別建立階段。舉例來說,如果您設定 Canary 部署 25%、50% 和 100%,則會有三個階段:
canary-25
canary-50
stable
這些階段名稱是標準名稱:canary-[PERCENTAGE]
代表 Canary 階段,stable
代表 100% 階段。不過,如果您設定自訂自動化初期測試或自訂初期測試,可以控管階段名稱。
工作和工作執行作業
每個推出階段都包含一或多個工作。
如果採用標準部署策略,且未啟用部署驗證,則只有一個階段 (stable
)。
如果是初期測試發布作業,初期測試的每個部分 (例如 canary-25
、canary-50
、stable
) 都會對應一個階段,每個階段都會有 deploy
工作。如果啟用驗證,每個階段也會有 verify
工作。
工作執行是工作執行個體。舉例來說,如果 deploy
工作執行成功,該工作就不會再執行。如果失敗,可以做為另一個工作執行作業重試。
首次略過階段
部分部署策略 (例如初期測試版本) 會在舊版和新版之間分配流量。如果您是首次部署至目標,由於沒有舊版,因此我們無法分配流量。
因此,首次部署初期測試版時,我們會略過初期測試版階段,直接執行 stable
階段。之後,應用程式就會部署完成,而日後的 Canary 部署作業將包含 Canary 階段。
在實際情況中,您通常會執行 Canary 部署,應用程式已在執行中,因此很少會略過這個階段。
推出作業中的狀態
推出作業、階段、工作和工作執行都有狀態。本節將說明每個狀態。
推出作業狀態
推出作業會處於下列其中一種狀態:
APPROVAL_REJECTED
推出作業需要核准,但核准遭拒。
CANCELLED
使用者取消的推出作業的終端狀態。
CANCELLING
使用者已取消推出作業,但取消程序尚未完成。
HALTED
在平行部署中,如果一或多項子項推出作業失敗,但至少有一項子項推出作業成功,則如果目前階段之後還有其他階段,控制器推出作業會 HALTED。
如要繼續推出暫停的控制器,請採取下列任一做法:
取消控制器推出作業
重試或略過子項推出作業中失敗的工作
IN_PROGRESS
工作執行作業正在處理中。
FAILED
工作失敗,且使用者未選擇忽略失敗。
PENDING
系統尚未開始處理推出作業。這個狀態會轉換為
IN_PROGRESS
或CANCELED
。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 參考資料。
主控台
在推送管道清單中,按一下您的管道。
「推送 pipeline 詳細資料」頁面會以圖形顯示推送 pipeline 的進度。
在「推出」分頁的「發布管道詳細資料」下方,按一下推出作業的名稱。
系統隨即會顯示該推出作業的詳細資料頁面。
請注意,在本範例中,發布作業有
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 參考資料。
主控台
在推送管道清單中,按一下您的管道。
「推送 pipeline 詳細資料」頁面會以圖形顯示推送 pipeline 的進度。
在「推出」分頁的「發布管道詳細資料」下方,按一下推出作業的名稱。
系統隨即會顯示該推出作業的詳細資料頁面。
請注意,在本範例中,發布作業有
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 參考資料。
主控台
在推送管道清單中,按一下您的管道。
「推送 pipeline 詳細資料」頁面會以圖形呈現推送 pipeline 的進度。
在「推出」分頁的「發布管道詳細資料」下方,按一下推出作業的名稱。
系統隨即會顯示該推出作業的詳細資料頁面。
請注意,在本範例中,發布作業有
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 參考資料。
主控台
在推送管道清單中,按一下您的管道。
「推送 pipeline 詳細資料」頁面會以圖形呈現推送 pipeline 的進度。
在「推出」分頁的「發布管道詳細資料」下方,按一下推出作業的名稱。
系統隨即會顯示該推出作業的詳細資料頁面。
選取要忽略的失敗工作。
按一下「忽略失敗」按鈕。
系統會忽略失敗的工作執行作業,並比照工作順利完成後的做法,繼續執行推出作業。也就是說,如果同一階段還有其他工作,系統會執行這些工作。否則,推出作業即可進入下一階段。
重試失敗的工作
您可以重試失敗的工作執行作業。作業可能因下列任一原因而失敗:
工作執行作業無法完成。
例如權限可能失敗。
使用者終止了該項工作的執行作業。
終止工作執行作業會導致工作失敗,您可以重試。
驗證測試失敗。
在驗證工作中,驗證測試失敗。即使驗證作業已正確完成,其中一項驗證測試仍失敗,因此我們會將該結果傳回驗證作業。在這種情況下,您會重試工作,以便針對應用程式偵錯失敗的測試。
如要重試失敗的工作:
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 參考資料。
主控台
在推送管道清單中,按一下您的管道。
「推送 pipeline 詳細資料」頁面會以圖形呈現推送 pipeline 的進度。
在「推出」分頁的「傳送管線詳細資料」下方,按一下推出作業的名稱。
系統隨即會顯示該推出作業的詳細資料頁面。
在「階段和工作」下方,按一下包含要重試工作的階段。
選取要重試的工作。
按一下「重試」並加以確認。
系統會再次執行工作,且「階段」表格中顯示的工作狀態為「進行中」。如果同一階段還有其他工作,系統會執行這些工作。否則,推出作業即可進入下一階段。
後續步驟
進一步瞭解 Cloud Deploy 的部署策略運作方式。
如要進一步瞭解推出、階段、工作和工作執行作業如何與 Cloud Deploy 的其餘部分搭配運作,請參閱 Cloud Deploy 服務架構說明文件。