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

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

使用 CodeDeploy 代理

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

重要

CodeDeploy 代理的支持的最低版本为 1.1.0。使用较早的 CodeDeploy 代理可能会导致部署失败。

注意

仅当您部署到 EC2/本地计算平台时,才需要 CodeDeploy 代理。使用 Amazon 云服务器或AmazonLambda 计算平台。

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

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

CodeDeploy 代理支持的操作系统

支持的 Amazon EC2 AMI 操作系统

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

  • Amazon Linux 2018.03.x、2017.03.x、2016.03.x、2016.03.x 以及 2016.09.x

  • Amazon Linux 2(ARM、x86)

  • Ubuntu 服务器 20.04 LTS、18.04 LTS、16.04 LTS 和 14.04 LTS

  • Microsoft Windows Windows 服务器 2019、2016、2012 R2 以及 2008 R2

  • Red Hat Enterprise Linux (RHEL) 7.x

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

支持的本地操作系统

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

  • Ubuntu 服务器 20.04 LTS、18.04 LTS、16.04 LTS 和 14.04 LTS

  • Microsoft Windows Windows 服务器 2019、2016、2012 R2 以及 2008 R2

  • Red Hat Enterprise Linux (RHEL) 7.x

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

CodeDeploy 代理的通信协议和端口

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

当 CodeDeploy 代理在 EC2 实例上运行时,它将使用EC2 元数据终端节点来检索实例相关信息。了解有关限制和授予实例元数据服务访问权限的更多信息。

CodeDeploy 代理的版本历史记录

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

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

版本 发行日期 详细信息

1.3.2

2021 年 5 月 6 日

重要

CodeDeploy 1.3.2 地址2018-1000201,这会影响运行代理的 Windows 主机。CVE 引用了 Ruy-ffi,这是 CodeDeploy 代理的依赖关系。如果您的代理安装了 Amazon EC2 Systems Manager (SSM) 并设置为自动更新,则无需执行任何操作。否则,需要执行操作才能手动更新代理。要升级代理,请按照更新 Windows 服务器上的 CodeDeploy 代理

Fixed:在 Ubuntu 20.04 及更 CodeDeploy 版本上安装代理程序时出现问题。

Fixed:解压缩文件时出现的间歇性问题,因为相对路径未得到正确处理。

添加了:对该项的支持 Amazon PrivateLink 和 VPC 终端节点的 Windows 实例。

添加了:对乌本图的 Support 20.10.

添加了:AppSpec 文件改进功能,如下所述。

升级:CodeDeploy 现在使用Amazon适用于 Ruby 3.0 的开发工具包。

1.3.1

2020 年 12 月 22 日

Fixed:1.3.0 阻止本地实例启动的问题。

1.3.0

2020 年 11 月 10 日

重要

此版本已弃用。

Fixed:已删除不再使用的过期证书。

Fixed:已从代理卸载脚本中删除提示消息Amazon Systems Manager,从而更轻松地将主机或队列降级为先前版本的代理。

1.2.1

2020 年 9 月 23 日

Changed:升级Amazon SDK for Ruby依赖关系从 v2 到 v3。

添加了:Support IMDSv2。如果 IMDSv2 http 请求失败,则包括一个静默回退到 IMDSv1。

Changed:更新了安全修补程序的 Rake 和 Rubyzip 依赖关系。

Fixed:确保空 PID 文件将返回No CodeDeploy Agent Running并在代理启动时清理 PID 文件。

1.1.2

2020 年 8 月 4 日

添加了:Support Ubuntu 服务器 19.10 和 20.04。

注意::19.10 版本已到达其生命周期结束日期,并且不再受 Ubuntu 或 CodeDeploy 的支持。

添加了:Linux 和 Ubuntu 的内存效率提高,以更及时地释放预留内存。

添加了:与 Windows 服务器 “静默清理” 的兼容性导致代理在某些情况下无响应。

添加了:在清理过程中忽略非空目录,以避免部署失败。

添加了:对该项的支持Amazon本地区在洛杉矶(洛杉矶)。

添加了:从实例元数据中提取可用区以提供AmazonLocal Zones。

添加了:用户现在可以在子目录中提供其归档文件,而不需要将其存储在根目录中。

添加了:检测到 Rubyzip 可能导致内存泄漏的问题。更新了解压缩命令,以在使用 Rubyzip 之前首先尝试使用系统安装的解压缩实用程序。

添加了:enable_auth_policy:作为代理配置设置。

Changed:解压缩警告现在会被忽略,因此部署将继续。

1.1.0

2020 年 6 月 30 日

Changed:CodeDeploy 代理的版本控制现在遵循 Ruby 标准版本控制约定。

添加了:安装和更新命令的新参数,允许从命令行安装特定代理版本。

已删除:删 CodeDeploy Linux 和 Ubuntu 的代理自动更新程序。要配置 CodeDeploy 代理的自动更新,请参阅使用安装 CodeDeploy 代理Amazon Systems Manager

1.0.1.1597

2018 年 11 月 15 日

重要

CodeDeploy 代理的支持的最低版本为 1.1.0。使用较早的 CodeDeploy 代理可能会导致部署失败。

Enhancement:CodeDeploy 支持 Ubuntu 18.04。

Enhancement:CodeDeploy 支持 Ruby 2.5。

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

1.0.1.1518

2018 年 12 月 6 日

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

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

Enhancement:改进了删除文件时的性能。

1.0.1.1458

2018 年 3 月 6 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

Enhancement:修复了一个问题,该问题导致本地 CLI 在包含 BeforeInstall 生命周期事件的部署期间失败。

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

1.0.1.1352

2017 年 11 月 16 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

1.0.1.1106

2017 年 5 月 16 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

Enhancement:使 CodeDeploy 代理与版本 2.9.2Amazon SDK for Ruby(aws-sdk-core 2.9.2)。

1.0.1.1095

2017 年 3 月 29 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

Enhancement:在中国(北京)地区引入了对 CodeDeploy 代理的支持。

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

Enhancement:改进了对untar操作。

1.0.1.1067 2017 年 1 月 6 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

Enhancement:修改了许多错误消息,以包含导致部署失败的更具体的原因。

Enhancement:修复了导致 CodeDeploy 代理无法在某些部署中指定要部署的正确应用程序修订的问题。

Enhancement:已恢复使用pushdpopd之前和之后untaroperation.

1.0.1.1045 2016 年 11 月 21 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

Enhancement:使 CodeDeploy 代理与版本 2.6.11 兼容。Amazon SDK for Ruby(aws-sdk-core 2.6.11)。

1.0.1.1037 2016 年 10 月 19 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

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

1.0.1.1011.1 2016 年 8 月 17 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

1.0.1.1011 2016 年 8 月 15 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

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

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

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

1.0.1.966 2016 年 6 月 16 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

功能:引入了用户配置文件运行 CodeDeploy 代理的支持

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

Enhancement:使 CodeDeploy 代理与版本 2.3Amazon SDK for Ruby(aws-sdk-core 2.3)。

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

Enhancement:提高了标识进程名称时的准确性。

1.0.1.950 2016 年 3 月 24 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

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

1.0.1.934 2016 年 2 月 11 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

1.0.1.880 2016 年 1 月 11 日

注意:此版本不再受支持,可能会导致部署失败。

Enhancement:使 CodeDeploy 代理与版本 2.2 兼容。Amazon SDK for Ruby(aws-sdk-core 2.2)。版本 2.1.2 仍受支持。

1.0.1.854 2015 年 11 月 17 日

注意:不再支持此版本。如果您使用此版本,您的部署可能会失败。

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

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

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

Enhancement:添加了对监视 CodeDeploy 代理日志的支持,使用Amazon CloudWatch Logs

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

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

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

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

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

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

由 CodeDeploy 代理安装的文件

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

'/opt/codedeploy-agent/deployment-root'适用于亚马逊 Linux、Ubuntu 服务器和 RHEL 实例。

'C:\ProgramData\Amazon\CodeDeploy'的 Windows Server 实例。

您可以使用root_dir设置来配 CodeDeploy 该目录的名称和位置。有关更多信息,请参阅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)。每个部署组目录都包含该部署组中每次尝试的部署的一个子目录。

    您可以使用批处理获取部署命令查找部署组 ID。

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

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

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

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

    如果要查找某个部署的文件夹,但不知道其部署 ID 或部署组 ID,则可以使用 Amazon CodeDeploy 控制台或 Amazon CLI 来查找它们。有关更多信息,请参阅查看 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 代理将继续向其中写入内容,同时删除旧内容。