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

一般问题排查

一般问题排查核对清单

您可以使用以下核对清单来排查失败部署问题。

  1. 请参阅使用 AWS CodeDeploy 查看部署详细信息View Instance Details以确定部署失败的原因。如果您无法确定原因,请继续本核查清单中的其余项目。

  2. 检查您是否已正确配置实例:

  3. 检查应用程序和部署组设置:

  4. 确认已正确配置应用程序修订:

  5. 检查是否已正确配置服务角色。有关信息,请参阅 步骤 3:为 AWS CodeDeploy 创建服务角色

  6. 确认您已执行AWS CodeDeploy 入门中的步骤,以便:

    • 将策略附加至 IAM 用户。

    • 安装或升级并配置 AWS CLI。

    • 创建 IAM 实例配置文件和服务角色。

    有关更多信息,请参阅 AWS CodeDeploy 的身份验证和访问控制

  7. 确认您正在使用 AWS CLI 版本 1.6.1 或更高版本。要检查您已安装的版本,请调用 aws --version

如果您仍无法排查失败部署的问题,请查看本主题中的其他问题。

AWS CodeDeploy 部署资源仅在特定区域中受支持

如果您在 AWS CLI 或 AWS CodeDeploy 控制台中看不到或无法访问应用程序、部署组、实例或其他部署资源,请确保您引用了 AWS General Reference 中的区域和终端节点中列出的某个区域。

必须在这些区域中的某个区域中启动和创建将在 AWS CodeDeploy 部署中使用的 Amazon EC2 实例和 Auto Scaling 组。

如果您使用的是 AWS CLI,请从 AWS CLI 运行 aws configure 命令。然后,您可以查看和设置默认区域。

如果您使用的是 AWS CodeDeploy 控制台,请从导航栏上的区域选择器中,选择一个受支持的区域。

重要

要在 中国(北京)区域 或 中国 (宁夏) 区域 中使用服务,您必须拥有这些区域的账户和凭据。其他 AWS 区域的账户和凭证不适用于 北京和宁夏区域,反之亦然。

有关 中国区域 的一些资源的信息 (例如 AWS CodeDeploy 资源工具包存储桶名称和 AWS CodeDeploy 代理安装过程) 不包含在此版本的 AWS CodeDeploy 用户指南 中。

有关更多信息:

所需的 IAM 角色不可用

如果您依赖的 IAM 实例配置文件或服务角色是作为某个 AWS CloudFormation 堆栈的一部分创建的,则当您删除该堆栈时,也将删除所有 IAM 角色。这可能是 IAM 角色不再在 IAM 控制台中显示以及 AWS CodeDeploy 不再按预期运行的原因。要纠正此问题,您必须手动重新创建已删除的 IAM 角色。

避免对同一 Amazon EC2 实例进行并行部署

作为最佳实践,您应避免导致尝试同时对一个 Amazon EC2 实例进行多次部署的情况。如果来自不同部署的命令相互竞争在一个实例上运行,则部署可能会超时并失败,原因如下:

  • 如果第一个生命周期事件未在部署触发后五分钟内启动,则 AWS CodeDeploy 会使部署失败。您可以使用控制台或 AWS CLI create-deployment 命令触发部署。

  • 如果某个生命周期事件未在前一个生命周期事件结束后五分钟内启动,则 AWS CodeDeploy 会使部署失败。

  • AWS CodeDeploy 代理一次只能处理一个部署命令。

  • 如果尝试同时运行多个部署,则无法控制部署发生的顺序。

注意

生命周期事件中脚本的默认超时时间为 30 分钟。您可以在AppSpec file中将超时时间更改为其他值。有关更多信息,请参阅 为 EC2/本地 部署添加 AppSpec 文件

如果一个部署的步骤未在 5 分钟内完成,即使部署过程按预期运行,AWS CodeDeploy 逻辑也会将该部署视为失败的部署。如果来自多个部署的命令同时发送到 AWS CodeDeploy 代理,则可能超出 5 分钟的限制。

有关您在 Auto Scaling 组中进行并行部署时可能遇到的其他难题的信息,请参阅避免将多个部署组与一个 Auto Scaling 组关联

使用某些文本编辑器创建 AppSpec 文件和 Shell 脚本可能会导致部署失败

某些文本编辑器会将非标准、非打印字符引入文件中。如果您使用文本编辑器创建或修改要在 Amazon Linux、Ubuntu Server 或 RHEL 实例上运行的 AppSpec 文件或 Shell 脚本文件,则依赖这些文件的任何部署均可能失败。当 AWS CodeDeploy 在部署过程中使用这些文件时,存在这些字符可能导致难以排查 AppSpec file验证失败问题和脚本执行失败的问题。

在 AWS CodeDeploy 控制台中,在部署的事件详细信息页上,选择 View logs。(或者,使用 AWS CLI 调用 get-deployment-instance 命令。)查找像“invalid character”、“command not found”或“file not found”这样的错误。

为了解决此问题,我们建议:

  • 请不要使用自动将非打印字符(例如,回车)(^M 字符)引入 AppSpec 文件和 Shell 脚本文件中的文本编辑器。

  • 使用在您的 AppSpec 文件和 Shell 脚本文件中显示非打印字符(例如回车)的文本编辑器,以便查找并删除任何可能自动或随机引入的字符。有关这些类型的文本编辑器的示例,请在 Internet 上搜索“文本编辑器显示回车”。

  • 使用在 Amazon Linux、Ubuntu Server 或 RHEL 实例上运行的文本编辑器来创建在 Amazon Linux、Ubuntu Server 或 RHEL 实例上运行的 Shell 脚本文件。有关这些类型的文本编辑器的示例,请在 Internet 上搜索“Linux Shell 脚本编辑器”。

  • 如果您必须使用 Windows 或 Mac OS 中的文本编辑器来创建要在 Amazon Linux、Ubuntu Server 或 RHEL 实例上运行的 Shell 脚本文件,请使用可将 Windows 或 Mac OS 格式的文本转换为 Unix 格式的程序或实用工具。有关这些程序和实用工具的示例,请在 Internet 上搜索“DOS 到 UNIX”或“Mac 到 UNIX”。请确保在目标操作系统上测试转换后的 Shell 脚本文件。

使用 macOS 中的 Finder 捆绑应用程序修订可能会导致部署失败

如果您在 Mac 上使用 Finder 图形用户界面 (GUI) 应用程序将某个 AppSpec file和相关文件及脚本捆绑(压缩)到一个应用程序修订存档 (.zip) 文件中,则部署可能会失败。这是因为,Finder 会在 .zip 文件中创建一个中间 __MACOSX 文件夹并将组件文件放入该文件夹中。AWS CodeDeploy 找不到组件文件,部署失败。

要解决此问题,建议您使用 AWS CLI 调用 push 命令,这会将组件文件压缩为预期结构。或者,您可以使用 Terminal(而不是 GUI)来压缩组件文件。Terminal 不创建中间 __MACOSX 文件夹。