使用以下方式重新部署和復原部署 CodeDeploy - AWS CodeDeploy

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用以下方式重新部署和復原部署 CodeDeploy

CodeDeploy 將先前部署的應用程式修訂版重新部署為新部署,以復原部署。這些轉返的部署在技術上而言是具有新部署 ID 的新部署,而不是先前部署的還原版本。

您可以自動或手動轉返部署。

自動回復

您可以設定部署群組,或設定部署在部署失敗或到達您指定的監控閾值時自動轉返。在此案例下,便會部署最後一個已知良好的應用程式修訂版本。當您建立應用程式或是建立或更新部署群組時,可以設定自動轉返。

當您建立新的部署時,您也可以選擇覆寫先前為部署群組指定的自動轉返組態。

注意

您可以使用 Amazon 簡單通知服務,在自動復原部署時接收通知。如需相關資訊,請參閱Monitoring Deployments with Amazon SNS Event Notifications

如需設定自動轉返的詳細資訊,請參閱設定部署群組的進階選項

手動復原

如果您尚未設定自動轉返,則可以建立使用任何先前部署應用程式修訂的新應用程式,並遵循重新部署修訂的步驟,以手動轉返部署。如果應用程式已進入不明狀態,則您可能會這麼做。您可以將應用程式重新部署已知工作中狀態,而不是花太多時間來故障診斷。如需詳細資訊,請參閱 使用 建立部署 CodeDeploy

注意

如果您從部署群組中移除執行個體,則 CodeDeploy 不會解除安裝任何可能已安裝在該執行個體上的執行個體。

復原和重新部署工作流程

啟動自動復原時,或手動啟動重新部署或手動復原時,會 CodeDeploy 先嘗試從每個參與的執行處理移除上次成功安裝的所有檔案。 CodeDeploy 通過檢查清理文件來做到這一點:

/opt/codedeploy-agent/deployment-root/deployment-instructions/deployment-group-ID-cleanup檔案 (適用於 Amazon Linux、Ubuntu 伺服器和 RHEL 執行個體)

C:\ProgramData\Amazon\CodeDeploy\deployment-instructions\deployment-group-ID-cleanup檔案 (適用於 Windows 伺服器執行個體)

如果存在,則在開始新部署之前, CodeDeploy 使用清理檔案從例證中移除所有列示的檔案。

例如,前兩個文字檔案和兩個指令碼檔案已部署到執行 Windows Server 的 Amazon EC2 執行個體,而指令碼在部署生命週期事件期間建立了兩個文字檔案:

c:\temp\a.txt (previously deployed by CodeDeploy) c:\temp\b.txt (previously deployed by CodeDeploy) c:\temp\c.bat (previously deployed by CodeDeploy) c:\temp\d.bat (previously deployed by CodeDeploy) c:\temp\e.txt (previously created by c.bat) c:\temp\f.txt (previously created by d.bat)

清理檔案只會列出前兩個文字檔案和兩個指令碼檔案:

c:\temp\a.txt c:\temp\b.txt c:\temp\c.bat c:\temp\d.bat

在新部署之前,只 CodeDeploy 會移除前兩個文字檔和兩個指令碼檔案,保留最後兩個文字檔案不變:

c:\temp\a.txt will be removed c:\temp\b.txt will be removed c:\temp\c.bat will be removed c:\temp\d.bat will be removed c:\temp\e.txt will remain c:\temp\f.txt will remain

在此程序中,不 CodeDeploy 會嘗試還原或以其他方式協調先前部署中任何指令碼在後續重新部署期間所採取的任何動作,無論是手動還是自動復原。例如,如果c.batd.bat檔案包含不重新建立e.txt和檔f.txt案的邏輯 (如果它們已存在),則舊版本的e.txtf.txt將在每次 CodeDeploy 執行c.bat和後續部署d.bat中保持不變。您可以將邏輯新增至 c.batd.bat 一律檢查 e.txtf.txt 的舊版本,並在建立新的版本之前予以刪除。

復原現有內容的行為

作為部署程序的一部分, CodeDeploy 代理程式會從每個執行個體中移除最近部署所安裝的所有檔案。如果不屬於先前部署的檔案出現在目標部署位置中,您可以選擇在下次部署期間如 CodeDeploy 何處理這些檔案:

  • 部署失敗 — 報告錯誤,且部署狀態變更為「失敗」。

  • 覆寫內容 — 應用程式修訂版本中的檔案版本會取代實例上已有的版本。

  • 保留內容 — 保留目標位置中的檔案,且不會將應用程式修訂版本中的版本複製到實例。

您可以在建立部署時選擇此行為。如果在主控台中建立部署,請參閱建立 EC2/內部部署運算平台部署 (主控台)。如果使用建立部署 AWS CLI,請參閱建立 EC2/內部部署運算平台部署 (CLI)

您可以選擇保留您下一個部署想要含有的檔案,而不需要將這些檔案新增至應用程式修訂套件。例如,您將檔案直接上傳至部署所需的執行個體,但未新增至應用程式修訂套件。或者,如果您的應用程式已經在生產環境中,但您想要第一次使用 CodeDeploy 來部署檔案,則可以將檔案上傳到執行個體。

如果發生因部署失敗而重新部署最新成功部署應用程式修訂的轉返,則會將該最後成功部署的內容處理選項套用至轉返部署。

不過,如果失敗的部署設定為覆寫,而不是保留檔案,則在轉返期間可能發生意外結果。具體而言,失敗的部署可能會移除您預期保留的檔案。轉返部署執行時,檔案不在執行個體上。

在下列範例中,有三種部署。在部署 3 期間再次部署應用程式修訂 1 時,任何在失敗的第二個部署期間覆寫 (刪除) 的檔案都無法再使用 (無法保留):

部署

應用程式修訂

內容覆寫選項

部署狀態

行為和結果

部署 1

應用程式修訂 1

RETAIN (保留)

Succeeded

CodeDeploy 偵測目標位置中未由先前部署部署所部署的檔案。這些檔案可能故意放在該處,而成為目前部署的一部分。它們會保留並記錄為目前部署套件的一部分。

部署 2

應用程式修訂 2

OVERWRITE (覆寫)

失敗

在部署程序期間, CodeDeploy 會刪除上一次成功部署的所有檔案。這包含在部署 1 期間保留的檔案。

不過,部署因無關的原因而失敗。

部署 3

應用程式修訂 1

RETAIN (保留)

由於部署或部署群組已啟用 auto 復原, CodeDeploy因此請部署最後一個已知的良好應用程式修訂版本,即應用程式修訂版本 1。

但是,在部署 2 失敗之前,您要保留在部署 1 中的檔案已刪除,且無法由其擷取 AWS CodeDeploy。您可以自行將它們新增至執行個體 (如果應用程式修訂 1 需要它們),也可以建立新的應用程式修訂。