Cloud Deploy 推出作業包含多個階段。階段是指在推行期間要執行的工作,並以有序的方式邏輯分組。
每個階段都包含工作,也就是在各階段中要採取的動作 (例如 deploy
或 verify
)。每個工作可以有零個或多個工作執行作業。工作執行是工作例項。如果工作尚未執行,則不會有任何工作執行。
推出作業的結構
推出作業是一種 Cloud Deploy 資源,可將版本與目標建立關聯。
階段
每個推行計畫都包含一或多個階段。
對於標準部署策略,只有一個階段:stable
。
對於測試群組部署策略,每個設定百分比都有個別的階段。舉例來說,如果您設定 Canary 部署 25%、50% 和 100% 的用戶,就會有三個階段:
canary-25
canary-50
stable
這些階段名稱是標準名稱:canary-[PERCENTAGE]
代表 Canary 階段,stable
代表 100% 階段。不過,如果您設定手動或自訂 Canary,則可以控制階段名稱。
工作和工作執行作業
每個推出階段都包含一或多個工作。
如果是採用標準部署策略,且未啟用部署驗證,則只有一個階段 (stable
)。
對於初期測試版本推出作業,每個初期測試版本的部分 (例如 canary-25
、canary-50
、stable
) 都會有一個階段,而每個階段都有一個 deploy
工作。如果啟用驗證功能,每個階段也會有 verify
工作。
工作執行是工作例項。舉例來說,如果系統執行 deploy
工作的工作執行作業,且該作業成功執行,則該工作就不會再執行其他工作。如果失敗,則可在其他工作執行時重試。
首次略過階段
部分部署策略 (例如初期測試版本) 會在舊版和新版之間分配流量。如果您是首次將應用程式部署至目標,就沒有舊版,因此我們無法分配流量。
因此,當您首次部署 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
執行初期測試版等部署策略時,如果尚未有可用於分流流量的應用程式執行版本,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 參考資料。
主控台
按一下推送管道清單中顯示的管道。
「Delivery pipeline details」(提交管道詳細資料) 頁面會以圖形呈現提交管道的進度。
在「推出作業」分頁的「提交管道詳細資料」下方,按一下推出作業的名稱。
系統會顯示該推出作業的詳細資料頁面。
請注意,在這個範例中,發布作業包含
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 參考資料。
主控台
按一下推送管道清單中顯示的管道。
「Delivery pipeline details」(提交管道詳細資料) 頁面會以圖形呈現提交管道的進度。
在「推出作業」分頁的「提交管道詳細資料」下方,按一下推出作業的名稱。
系統會顯示該推出作業的詳細資料頁面。
請注意,在這個範例中,發布作業包含
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)。如要查看工作執行 ID,請前往 Google Cloud 控制台 (針對 Cloud Deploy) 的推出頁面:
您也可以使用 gcloud deploy rollouts
describe
指令取得工作執行 ID。
RELEASE_NAME
是這個工作執行作業所屬的版本名稱。
PIPELINE_NAME
是您用來管理此版本部署作業的發布管道名稱。
ROLLOUT_NAME
是這項工作執行作業所屬的推播名稱。
REGION
是建立版本的區域名稱,例如 us-central1
。必填。
如要進一步瞭解 gcloud deploy job-runs terminate
指令,請參閱 Google Cloud SDK 參考資料。
主控台
按一下推送管道清單中顯示的管道。
「Delivery pipeline details」頁面會以圖表呈現推送管道的進度。
在「推出作業」分頁的「提交管道詳細資料」下方,按一下推出作業的名稱。
系統會顯示該推出作業的詳細資料頁面。
請注意,在這個範例中,發布作業包含
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 參考資料。
主控台
按一下推送管道清單中顯示的管道。
「Delivery pipeline details」頁面會以圖表呈現推送管道的進度。
在「推出作業」分頁的「提交管道詳細資料」下方,按一下推出作業的名稱。
系統會顯示該推出作業的詳細資料頁面。
選取要忽略的失敗工作。
按一下「忽略失敗」按鈕。
系統會忽略失敗的工作執行作業,並繼續推出作業,就如同工作已順利完成一樣。也就是說,如果同一個階段有其他工作,則會執行這些工作。否則,推出作業即可進展至下一個階段。
重試失敗的工作
您可以重試失敗的工作執行作業。工作可能會因下列任一原因而失敗:
工作執行作業無法完成。
例如權限可能發生錯誤。
使用者終止了該工作執行程序。
終止工作執行作業會導致工作失敗,您可以重試。
驗證測試失敗。
對於驗證工作,驗證測試失敗。雖然驗證工作已正確完成,但其中一個驗證測試失敗,我們會將該測試結果傳回驗證工作。在這種情況下,您可以重試工作,以便針對應用程式偵錯失敗的測試。
如要重試失敗的工作,請按照下列步驟操作:
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 參考資料。
主控台
按一下推送管道清單中顯示的管道。
「Delivery pipeline details」頁面會以圖表呈現推送管道的進度。
在「Rollouts」分頁標籤的「Delivery pipeline details」下方,按一下推出作業的名稱。
系統會顯示該推出作業的詳細資料頁面。
在「階段和工作」下方,按一下包含要重試的工作的階段。
選取要重試的工作。
按一下「重試」並確認。
再次執行工作,工作狀態會顯示為「進行中」,如階段表格所示。如果同個階段中有其他工作,則會執行這些工作。否則,推出作業即可進展至下一個階段。
後續步驟
進一步瞭解 Cloud Deploy 中的部署策略運作方式。
如要進一步瞭解如何將發布、階段、工作和工作執行作業納入 Cloud Deploy 的其他部分,請參閱 Cloud Deploy 服務架構說明文件。