

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

# 使用 CodeDeploy 重新部署以及復原部署
<a name="deployments-rollback-and-redeploy"></a>

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

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

**Topics**
+ [自動轉返](#deployments-rollback-and-redeploy-automatic-rollbacks)
+ [手動轉返](#deployments-rollback-and-redeploy-manual-rollbacks)
+ [轉返和重新部署工作流程](#deployments-rollback-and-redeploy-workflow)
+ [具有現有內容的轉返行為](#deployments-rollback-and-redeploy-content-options)

## 自動轉返
<a name="deployments-rollback-and-redeploy-automatic-rollbacks"></a>

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

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

**注意**  
您可以使用 Amazon Simple Notification Service 在部署自動復原時接收通知。如需相關資訊，請參閱[使用 Amazon SNS 事件通知監控部署](monitoring-sns-event-notifications.md)。

如需設定自動轉返的詳細資訊，請參閱[設定部署群組的進階選項](deployment-groups-configure-advanced-options.md)。

## 手動轉返
<a name="deployments-rollback-and-redeploy-manual-rollbacks"></a>

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

**注意**  
如果您從部署群組中移除執行個體，CodeDeploy 不會解除安裝任何可能已安裝在該執行個體上的內容。

## 轉返和重新部署工作流程
<a name="deployments-rollback-and-redeploy-workflow"></a>

啟動自動轉返時，或手動啟動重新部署或手動轉返時，CodeDeploy 會先嘗試從每個參與的執行個體中移除上次成功安裝的所有檔案。CodeDeploy 透過檢查清除檔案來執行此操作：

 `/opt/codedeploy-agent/deployment-root/deployment-instructions/deployment-group-ID-cleanup` 檔案 （適用於 Amazon Linux、Ubuntu Server 和 RHEL 執行個體） 

`C:\ProgramData\Amazon\CodeDeploy\deployment-instructions\deployment-group-ID-cleanup` 檔案 （適用於 Windows Server 執行個體） 

如果存在，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.bat`和 `d.bat` 檔案包含邏輯，如果 `e.txt`和 `f.txt` 檔案已存在，則 `e.txt`和 的舊版本`f.txt`會在 CodeDeploy 執行`c.bat`時和後續部署`d.bat`中保持不變。您可以將邏輯新增至 `c.bat` 和 `d.bat` 一律檢查 `e.txt` 和 `f.txt` 的舊版本，並在建立新的版本之前予以刪除。

## 具有現有內容的轉返行為
<a name="deployments-rollback-and-redeploy-content-options"></a>

在部署程序中，CodeDeploy 代理程式會從每個執行個體移除最新部署所安裝的所有檔案。如果不屬於先前部署的檔案出現在目標部署位置，您可以選擇 CodeDeploy 在下一次部署期間如何處理它們：
+ 部署**失敗** — 報告錯誤，且部署狀態變更為失敗。
+ **覆寫內容** — 應用程式修訂版中的 檔案版本會取代執行個體上已存在的版本。
+ **保留內容** — 目標位置中的檔案會保留，而應用程式修訂版中的版本不會複製到執行個體。

您可以在建立部署時選擇此行為。如果在 主控台中建立部署，請參閱 [建立 EC2/現場部署運算平台部署 （主控台）](deployments-create-console.md)。如果使用 建立部署 AWS CLI，請參閱 [建立 EC2/現場部署運算平台部署 (CLI)](deployments-create-cli.md)。

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

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

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

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


****  

|  部署  |  應用程式修訂  |  內容覆寫選項  |  部署狀態  |  行為和結果  | 
| --- | --- | --- | --- | --- | 
|  部署 1  |  應用程式修訂 1  |  RETAIN (保留)  |  Succeeded  |  CodeDeploy 會偵測目標位置中先前部署未部署的檔案。這些檔案可能故意放在該處，而成為目前部署的一部分。它們會保留並記錄為目前部署套件的一部分。  | 
|  部署 2  |  應用程式修訂 2  |  OVERWRITE (覆寫)  |  失敗  |  在部署過程中，CodeDeploy 會刪除屬於先前成功部署一部分的所有檔案。這包含在部署 1 期間保留的檔案。 不過，部署因無關的原因而失敗。  | 
|  部署 3  |  應用程式修訂 1  |  RETAIN (保留)  |    | 由於已針對部署或部署群組啟用自動轉返，CodeDeploy 會部署最後一個已知良好的應用程式修訂版，即應用程式修訂版 1。不過，您想要保留在部署 1 中的檔案已在部署 2 失敗之前刪除，而且無法由 擷取 AWS CodeDeploy。您可以自行將它們新增至執行個體 (如果應用程式修訂 1 需要它們)，也可以建立新的應用程式修訂。 | 