AWS CodeDeploy
用户指南 (API 版本 2014-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

本指南中的过程支持新的控制台设计。如果您选择使用较旧版本的控制台,可以在本指南中找到许多仍然适用的概念和基本过程。要访问新控制台中的帮助,请选择信息图标。

使用 CodeDeploy 代理

CodeDeploy 代理是一个软件包,在某个实例上安装和配置该软件包后,它将支持在 CodeDeploy 部署中使用该实例。

注意

仅当您部署到 EC2/本地 计算平台 时,才需要 CodeDeploy 代理。使用 或 AWS Lambda 计算平台的部署不需要代理。

安装该代理时,将在实例上放置一个配置文件。此文件用于指定代理的工作方式。此配置文件指定 AWS CodeDeploy 在与实例交互时要使用的目录路径和其他设置。可以更改此文件中的某些配置选项。有关使用 CodeDeploy 代理配置文件的信息,请参阅CodeDeploy 代理配置参考

有关使用 CodeDeploy 代理的更多信息(例如,安装、更新和验证版本的步骤),请参阅管理 CodeDeploy 代理操作

CodeDeploy 代理支持的操作系统

支持的 Amazon EC2 AMI 操作系统

已在以下 Amazon EC2 AMI 操作系统上测试 CodeDeploy 代理:

  • Amazon Linux 2017.03.x、2016.09.0、2016.03.1、2016.03.0、2015.03、2014.09.1

  • Ubuntu Server 16.04 LTS 和 14.04 LTS

  • Microsoft Windows Server 2016、2012 R2 以及 2008 R2

  • Red Hat Enterprise Linux (RHEL) 7.x

CodeDeploy 代理可以作为开源系统来满足您的需求。它可与其他 Amazon EC2 AMI 操作系统配合使用。有关更多信息,请转至 GitHub 中的 CodeDeploy 代理存储库。

支持的本地操作系统

已在以下本地操作系统上测试 CodeDeploy 代理:

  • Ubuntu Server 14.04 LTS

  • Microsoft Windows Server 2016、2012 R2 以及 2008 R2

  • Red Hat Enterprise Linux (RHEL) 7.x

CodeDeploy 代理可以作为开源系统来满足您的需求。它可与其他本地实例操作系统配合使用。有关更多信息,请转至 GitHub 中的 CodeDeploy 代理存储库。

CodeDeploy 代理的通信协议和端口

CodeDeploy 代理通过端口 443 使用 HTTPS 进行出站通信。

面向 CodeDeploy 代理的、适用于 Ruby 的 AWS 开发工具包 (aws-sdk-core) 支持

1.0.1.880 版本之前的 CodeDeploy 代理版本只能与版本 2.1.2 及更早版本的 适用于 Ruby 的 AWS 开发工具包 (aws-sdk-core 2.1.2) 兼容。如果您使用的是 1.0.1.880 版本之前的 CodeDeploy 代理版本,建议您更新到最新版本。有关信息,请参阅下列内容:

可与 CodeDeploy 代理兼容的、最新版本的适用于 Ruby 的 AWS 开发工具包为 aws-sdk-core 2.3。

CodeDeploy 代理的版本历史记录

您的实例必须运行支持的 CodeDeploy 代理版本。当前支持的最低版本为 。如果您运行的是更早的版本,则针对您实例的部署可能会失败。

下表列出了 CodeDeploy 代理的所有版本,以及每个版本所含的功能和增强功能。

版本 发行日期 详细信息

1.0.1.1597

2018 年 11 月 15 日

增强功能:CodeDeploy 支持 Ubuntu 18.04。

增强功能:CodeDeploy 支持 Ruby 2.5。

增强功能:CodeDeploy 支持 FIPS 终端节点。有关 FIPS 终端节点的更多信息,请参阅 FIPS 140-2 概述。有关可用于 CodeBuild 的终端节点,请参阅 CodeDeploy 区域和终端节点

1.0.1.1518

2018 年 12 月 6 日

增强功能:修正了一个问题,该问题导致 CodeDeploy 代理在接受轮询请求的同时关闭时出错。

增强功能:添加了一项部署跟踪功能,可防止 CodeDeploy 代理在部署进行当中关闭。

增强功能:改进了删除文件时的性能。

1.0.1.1458

2018 年 3 月 6 日

增强功能:改进了证书验证,以支持更多受信任的机构。

增强功能:修复了当部署包含 BeforeInstall 生命周期事件时导致本地 CLI 失败的问题。

增强功能:修复了在更新 CodeDeploy 代理时,可能导致活动部署失败的问题。

1.0.1.1352

2017 年 11 月 16 日

功能:引入了一项新功能,用于测试和调试安装了 CodeDeploy 代理的本地计算机或实例 EC2/本地部署。

1.0.1.1106

2017 年 5 月 16 日

功能:引入了对处理目标位置上的不作为来自最新成功部署的应用程序修订的一部分的内容的新支持。针对现有内容的部署选项现在包括保留内容、覆盖内容或使部署失败。

增强功能:使 CodeDeploy 代理与适用于 Ruby 的 AWS 开发工具包版本 2.9.2 (aws-sdk-core 2.9.2) 兼容。

1.0.1.1095

2017 年 3 月 29 日

增强功能:在中国(北京)区域中引入了对 CodeDeploy 代理的支持。

增强功能:生命周期事件挂钩进行调用时,允许 Puppet 在 Windows Server 实例上运行。

增强功能:改进对 untar 操作的处理。

1.0.1.1067 2017 年 1 月 6 日

增强功能:修改了很多错误消息,以包含导致部署故障的更具体的原因。

增强功能:修复了导致 CodeDeploy 代理无法在一些部署中指定要部署的正确应用程序版本的问题。

增强功能:恢复在 untar 操作之前和之后使用 pushdpopd

1.0.1.1045 2016 年 11 月 21 日 增强功能:使 CodeDeploy 代理与适用于 Ruby 的 AWS 开发工具包版本 2.6.11 (aws-sdk-core 2.6.11) 兼容。
1.0.1.1037 2016 年 10 月 19 日

更新了用于 Amazon Linux、RHEL 和 Ubuntu Server 实例的 CodeDeploy 代理,进行了以下更改。对于 Windows Server 实例,最新版本仍为 1.0.1.998。

增强功能:该代理现在可以确定哪个 Ruby 版本安装在实例上,以使它可以使用该版本调用 codedeploy-agent 脚本。

1.0.1.1011.1 2016 年 8 月 17 日 增强功能:删除了由于外壳支持问题而在 1.0.1.1011 版中引入的更改。此版本代理在功能上与 2016 年 7 月 11 日发布的 1.0.1.998 版相同。
1.0.1.1011 2016 年 8 月 15 日

更新了用于 Amazon Linux、RHEL 和 Ubuntu Server 实例的 CodeDeploy 代理,进行了以下更改。对于 Windows Server 实例,最新版本仍为 1.0.1.998。

功能:增加了在使用 systemd 初始化系统的操作系统上使用 bash shell 调用 CodeDeploy 代理的支持。

增强功能:在 CodeDeploy 代理和 CodeDeploy 代理更新程序中启用了对所有 Ruby 2.x 版本的支持。更新的 CodeDeploy 代理不再单纯依赖 Ruby 2.0。(CodeDeploy 代理安装程序的 deb 和 rpm 版本仍然需要 Ruby 2.0。)
1.0.1.998 2016 年 7 月 11 日

增强功能:修复了对使用 root 之外的用户配置文件运行 CodeDeploy 代理的支持。名为 USER 的变量将被替换为 CODEDEPLOY_USER,以避免与环境变量发生冲突。

1.0.1.966 2016 年 6 月 16 日

功能:引入了对使用 root 之外的用户配置文件运行 CodeDeploy 代理的支持。

增强功能:修复了对指定您希望 CodeDeploy 代理为部署组存档的应用程序修订数量的支持。

增强功能:使 CodeDeploy 代理与适用于 Ruby 的 AWS 开发工具包版本 2.3 (aws-sdk-core 2.3) 兼容。

增强功能:修复了与部署期间的 UTF-8 编码有关的问题。

增强功能:提高了标识进程名称时的准确性。

1.0.1.950 2016 年 3 月 24 日

功能:添加了安装代理支持。

增强功能:更新了安装脚本,如果已安装最新版本,则不会下载 CodeDeploy 代理。

1.0.1.934 2016 年 2 月 11 日

功能:引入了对指定您要 CodeDeploy 代理为部署组存档的应用程序修订数量的支持。

1.0.1.880 2016 年 1 月 11 日 增强功能:使 CodeDeploy 代理与适用于 Ruby 的 AWS 开发工具包版本 2.2 (aws-sdk-core 2.2) 兼容。版本 2.1.2 仍受支持。
1.0.1.854 2015 年 11 月 17 日

功能:引入了对 SHA-256 哈希算法的支持。

重要

2016 年 10 月 17 日后,CodeDeploy 代理的所有安装必须至少更新到版本 1.0.1.854。否则,部署会失败。有关更多信息,请参阅 部署失败,显示消息“PKCS7 签名的消息验证失败”

功能:在 .version 文件中引入了版本跟踪支持。

功能:通过使用环境变量使部署组 ID 可用。

增强功能:添加了对使用 Amazon CloudWatch Logs 监控 CodeDeploy 代理日志的支持。

有关相关信息,请参见下列内容:

有关 CodeDeploy 代理版本的历史记录,请参阅 GitHub 上的版本存储库

应用程序修订和日志文件清理

CodeDeploy 代理将修订和日志文件存档在实例上。CodeDeploy 代理将清理这些项目以节省磁盘空间。

应用程序修订部署日志:可以使用代理配置文件中的 :max_revisions: 选项,通过输入任何正整数来指定要存档的应用程序修订的数目。CodeDeploy 还对这些修订的日志文件进行存档。所有其他文件将被删除,但上次成功部署的日志文件除外。该日志文件将始终保留,即使失败的部署数量超过保留的修订数量也是如此。如果不指定任何值,则除了当前部署的修订之外,CodeDeploy 还将保留五个最新修订。

CodeDeploy 日志:对于 Amazon Linux、Ubuntu Server 和 RHEL 实例,CodeDeploy 代理在 /var/log/aws/codedeploy-agent 文件夹下轮换日志文件。日志文件将在每天 00:00:00(实例时间)轮换。日志文件会在七天后删除。已轮换日志文件的命名模式是 codedeploy-agent.YYYYMMDD.log

CodeDeploy 代理安装的文件

CodeDeploy 代理在实例上的根目录中存储修订、部署历史记录和部署脚本。该目录的默认名称和位置是:

'/opt/codedeploy-agent/deployment-root'(针对 Amazon Linux、Ubuntu Server 和 RHEL 实例)。

'C:\ProgramData\Amazon\CodeDeploy'(针对 Windows Server 实例)。

您可以使用 CodeDeploy 代理配置文件中的 root_dir 设置来配置该目录的名称和位置。有关更多信息,请参阅 CodeDeploy 代理配置参考

下面是根目录下文件和目录结构的示例。该结构假定有 N 个部署组,每个部署组包含 N 个部署。

|--deployment-root/ |-- deployment group 1 ID | |-- deployment 1 ID | | |-- Contents and logs of the deployment's revision | |-- deployment 2 ID | | |-- Contents and logs of the deployment's revision | |-- deployment N ID | | |-- Contents and logs of the deployment's revision |-- deployment group 2 ID | |-- deployment 1 ID | | |-- bundle.tar | | |-- deployment-archive | | | | -- contents of the deployment's revision | | |-- logs | | | | -- scripts.log | |-- deployment 2 ID | | |-- bundle.tar | | |-- deployment-archive | | | | -- contents of the deployment's revision | | |-- logs | | | | -- scripts.log | |-- deployment N ID | | |-- bundle.tar | | |-- deployment-archive | | | | -- contents of the deployment's revision | | |-- logs | | | | -- scripts.log |-- deployment group N ID | |-- deployment 1 ID | | |-- Contents and logs of the deployment's revision | |-- deployment 2 ID | | |-- Contents and logs of the deployment's revision | |-- deployment N ID | | |-- Contents and logs of the deployment's revision |-- deployment-instructions | |-- [deployment group 1 ID]_cleanup | |-- [deployment group 2 ID]_cleanup | |-- [deployment group N ID]_cleanup | |-- [deployment group 1 ID]_install.json | |-- [deployment group 2 ID]_install.json | |-- [deployment group N ID]_install.json | |-- [deployment group 1 ID]_last_successful_install | |-- [deployment group 2 ID]_last_successful_install | |-- [deployment group N ID]_last_successful_install | |-- [deployment group 1 ID]_most_recent_install | |-- [deployment group 2 ID]_most_recent_install | |-- [deployment group N ID]_most_recent_install |-- deployment-logs | |-- codedeploy-agent-deployments.log
  • Deployment Group ID 文件夹代表您的每个部署组。部署组目录的名称是其 ID (例如,acde1916-9099-7caf-fd21-012345abcdef)。每个部署组目录都包含该部署组中每次尝试的部署的一个子目录。

    您可以使用 batch-get-deployments 命令查找部署组 ID。

  • Deployment ID 文件夹代表部署组中的每个部署。每个部署目录的名称都是其 ID。每个文件夹都包含:

    • bundle.tar,一个压缩文件,其中包含部署修订的内容。如果要查看修订,请使用 zip 解压实用程序。

    • deployment-archive,一个目录,其中包含部署修订的内容。

    • logs,一个包含 scripts.log 文件的目录。此文件列出部署的 AppSpec file中指定的所有脚本的输出。

    如果要查找某个部署的文件夹,但不知道其部署 ID 或部署组 ID,则可以使用 AWS CodeDeploy 控制台或 AWS CLI 来查找它们。有关更多信息,请参阅查看 CodeDeploy 部署详细信息

    部署组中可以存档的默认最大部署数为五个。达到该数量后,将来的部署将被存档,最旧的存档将被删除。您可以使用 CodeDeploy 代理配置文件中的 max_revisions 设置来更改该默认值。有关更多信息,请参阅 CodeDeploy 代理配置参考

    注意

    如果您想恢复已存档部署使用的硬盘空间,请将 max_revisions 设置更新为较低的数量,例如 1 或 2。下一次部署将删除已存档的部署,以便数量等于您指定的数量。

  • deployment-instructions 包含每个部署组的四个文本文件:

    • [Deployment Group ID]-cleanup,一个文本文件,其中包含部署期间运行的每个命令的撤消版本。示例文件名为 acde1916-9099-7caf-fd21-012345abcdef-cleanup

    • [Deployment Group ID]-install.json,在最近的部署过程中创建的 JSON 文件。它包含部署期间运行的命令。示例文件名为 acde1916-9099-7caf-fd21-012345abcdef-install.json

    • [Deployment Group ID]_last_successfull_install,一个文本文件,其中列出了上次成功部署的存档目录。该文件在 CodeDeploy 代理将部署应用程序中的所有文件复制到实例时创建。它由 CodeDeploy 代理在下次部署期间使用,旨在确定要运行的 ApplicationStopBeforeInstall 脚本。示例文件名为 acde1916-9099-7caf-fd21-012345abcdef_last_successfull_install

    • [Deployment Group ID]_most_recent_install,一个文本文件,其中列出了最近一次部署的存档目录的名称。该文件在部署中的文件成功下载时创建。[deployment group ID]_last_successfull_install 文件在该文件之后创建,即下载的文件被复制到其最终目的地时。示例文件名为 acde1916-9099-7caf-fd21-012345abcdef_most_recent_install

  • deployment-logs 包含以下日志文件:

    • codedeploy-agent.yyyymmdd.log 文件按天创建,只要当天发生部署活动,就会创建该文件。每个日志文件都包含有关当天部署的信息。这些日志文件可能对调试权限问题等很有用。日志文件最初名为 codedeploy-agent.log。第二天,其部署日期将被插入到文件名中。例如,如果今天是 2018 年 1 月 3 日,您可以在 codedeploy-agent.log 中看到有关今天的所有部署的信息。明天,也就是 2018 年 1 月 4 日,日志文件将重命名为 codedeploy-agent.20180103.log

    • codedeploy-agent-deployments.log 编译每个部署的 scripts.log 文件的内容。scripts.log 文件位于每个 logs 文件夹下的 Deployment ID 子文件夹中。此文件中的条目前面带有部署 ID。例如,“[d-ABCDEF123]LifecycleEvent - BeforeInstall”可能是在 ID 为 d-ABCDEF123 的部署期间写入的。当 codedeploy-agent-deployments.log 达到其最大大小时,CodeDeploy 代理将继续向其中写入内容,同时删除旧内容。