使用 CodeDeploy 重新部署和回滚部署 - Amazon CodeDeploy
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 CodeDeploy 重新部署和回滚部署

CodeDeploy 将以前的应用程序部署版本重新部署为新的部署。这些回滚部署在技术上属于新部署,具有新的部署 ID,不同于之前部署的存储版本。

可以自动或手动回滚部署。

自动回滚

您可以对部署组或部署进行配置,使之在部署失败或达到您指定的监控阈值时自动回滚。在这种情况下,将会部署上一个已知良好的应用程序版本。您可以在创建应用程序或是创建或更新部署组时配置自动回滚。

创建新部署时,您还可以选择覆盖已为部署组指定的自动回滚配置。

注意

每当部署自动回滚时,您都可使用 Amazon Simple Than( 使部署自动回滚) 接收通知。有关信息,请参阅 Monitoring Deployments with Amazon SNS Event Notifications

有关配置自动回滚的更多信息,请参阅为部署组配置高级选项

手动回滚

如果您尚未设置自动回滚,可以通过以下方式手动回滚部署:创建一个使用以前部署的任何应用程序修订的新部署,然后根据步骤重新部署一个修订。如果应用程序进入了未知状态,您可能会这么做。您可以将应用程序重新部署为已知工作状态,而不是花大量的时间排查故障。有关更多信息,请参阅使用 CodeDeploy 创建部署

注意

如果您从部署组中删除某个实例,则 CodeDeploy 不会卸载可能已安装在该实例上的任何内容。

回滚和重新部署工作流程

当启动自动回滚时,或在手动启动重新部署或手动回滚时,CodeDeploy 首先尝试从每个参与实例中删除上次成功安装的所有文件。CodeDeploy 为此,将检查下面的清除文件:

/opt/codedeploy-agent/deployment-root/deployment-instructions/deployment-group-ID-cleanup文件(适用于亚马逊 Linux、Ubuntu 服务器和 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.batd.bat文件包含逻辑,以便不重新创建e.txtf.txt文件(如果它们已经存在),那么旧版本e.txtf.txt将保持不变,无论何时 CodeDeploy 运行c.batd.bat在后续部署中。您可以向 c.batd.bat 中添加逻辑,始终先检查并删除旧版本的 e.txtf.txt,然后再创建新文件。

对现有内容进行回滚行为

作为部署过程的一部分,CodeDeploy 代理会从每个实例中删除由最新部署安装的所有文件。如果目标部署位置显示不是上一部署的一部分的文件,则可以选择 CodeDeploy 在下一个部署期间对这些文件执行哪些操作:

  • 使部署失败— 系统报告出错,并且部署状态更改为 “失败”。

  • 覆盖内容— 来自应用程序修订的文件版本将替换实例上已有的版本。

  • 保留内容— 目标位置的文件将保留,并且应用程序修订中的版本不会复制到实例。

您可以在创建部署时选择此行为。如果在控制台中创建部署,请参阅创建EC2/本地计算平台部署(控制台)。如果使用Amazon CLI,请参阅创建EC2/本地计算平台部署( CLI)

您可以选择保留要作为下一个部署的一部分的文件,而无需将这些文件添加到应用程序修订包中。例如,您可以将部署所需的文件直接上传到实例,但这些文件不会添加到应用程序修订包。或者,如果应用程序已在生产环境中,但您想首次使用 CodeDeploy 来部署应用程序,则可将文件上传到实例。

对于回滚 (其中由于部署失败,将重新部署最新的已成功部署的应用程序修订),上次成功部署的内容处理选项将应用于回滚部署。

但是,如果已将失败的部署配置为覆盖,而不是保留文件,则回滚期间可能出现意外结果。具体而言,部署失败可能会导致删除您预期保留的文件。当回滚部署运行时,这些文件未在实例上。

在以下示例中,有三种部署。在第三次部署期间再次部署应用程序修订 1 时,第二次失败部署期间覆盖 (删除) 的任何文件不再可用 (无法保留):

部署

应用程序修订

内容覆盖选项

部署状态

行为和结果

部署 1

应用程序修订 1

保留

Succeeded

CodeDeploy 在目标位置检测上一部署中未部署的文件。这些文件可能特意放置在该位置以成为当前部署的一部分。它们将保留并记录为当前部署包的一部分。

部署 2

应用程序修订 2

覆盖

已失败

在部署过程中,CodeDeploy 将删除作为上一成功部署的一部分的所有文件。这包括在部署 1 期间保留的文件。

但是,部署是因不相关的原因导致失败的。

部署 3

应用程序修订 1

保留

由于已为部署或部署组启用自动回滚,因此,CodeDeploy 将部署上一个已知正常的应用程序修订 (应用程序修订 1)。

但是,您想在部署 1 中保留的文件已在部署 2 失败之前被删除,并且无法由Amazon CodeDeploy。您可以自行将这些文件添加到实例 (如果应用程序修订 1 需要这些文件),也可以创建新的应用程序修订。