跳至主要内容

Amazon CodeDeploy

Amazon CodeDeploy 常见问题

一般性问题

全部打开

Amazon CodeDeploy 是一项可以将代码自动部署到任意实例中的服务,这些实例包括 Amazon EC2 实例和在本地运行的实例。Amazon CodeDeploy 可以帮助您更轻松地快速发布新功能、避免在应用程序部署期间停机,以及处理复杂的应用程序更新任务。您可以使用 Amazon CodeDeploy 来自动进行部署,这样就无需执行容易出错的手动操作,这项服务还会随着您的基础设施进行扩展,因此,您可以轻松部署到一个或数千个实例。

Amazon CodeDeploy 专为需要将应用程序部署到任何实例的开发人员和管理员而设计,这些实例包括 Amazon EC2 实例和本地运行的实例。它很灵活,任何想在实例上更新软件或运行脚本的人都可以使用。

Amazon CodeDeploy 可用于部署任何类型的应用程序。要使用 Amazon CodeDeploy,您需要指定要复制的文件,以及在部署期间要在每个实例上运行的脚本。 Amazon CodeDeploy 与编程语言和架构无关,因此您可以将脚本用于任何自定义部署逻辑。

Amazon CodeDeploy 支持多种操作系统。 Amazon CodeDeploy 提供了一些代理,这些代理已在 Amazon Linux、Red Hat Enterprise Linux、Ubuntu Server 和 Microsoft Windows Server 上完成了测试。如果希望使用其他的操作系统,您可以从此处获得作为一个开源软件提供的 Amazon CodeDeploy 代理。要详细了解操作系统支持,请参阅 Amazon CodeDeploy 文档

会的。Amazon CodeDeploy 可用于各种配置管理系统、持续集成和部署系统以及源代码控制系统。

Amazon CodeDeploy 是一项构建块服务,侧重于帮助开发人员部署和更新任意实例上的软件,这些实例包括 Amazon EC2 实例和内部运行的实例。 Amazon Elastic Beanstalk 和 Amazon OpsWorks 是端到端应用程序管理解决方案。

可以。 Amazon CodeDeploy 支持任何可以安装 CodeDeploy 代理并连接到亚马逊云科技公共端点的实例。

概念

全部打开

应用程序是部署到一组实例中的软件和配置的集合。一般情况下,该组中的实例运行的是同一种软件。例如,如果您有一个大型分布式系统,Web 层可能由一个应用程序组成,数据层可能由另一个应用程序组成。

修订版是源代码、构建后项目、网页、可执行文件和部署脚本以及 AppSpec 文件等可部署内容的特定版本。Amazon CodeDeploy 代理可以从 GitHub 或 Amazon S3 存储桶访问修订版。


部署组是与您作为部署对象的应用程序相关的一组实例。您可以通过指定标签、Auto Scaling 组名称或同时指定此二者,将实例添加到部署组中。您可以为一个应用程序定义多个部署组,如分阶段测试和生产。有关标签的信息,请参阅在控制台中使用 Amazon EC2 标签。有关如何在 Auto Scaling 组中进行部署的更多信息,请参阅 Auto Scaling 集成

部署配置是一项约束条件,决定一项部署如何通过实例在部署组中取得进展。您可以使用部署配置向多实例部署组执行零停机部署。例如,如果您的应用程序需要部署组中至少有 50% 的实例在运行中且提供流量,您可以在您的部署配置中指定这一点,从而使部署不会导致停机。如果没有与部署或者部署组相关联的部署配置,则在默认情况下,Amazon CodeDeploy 将会一次部署到一个实例中。有关部署配置的更多信息,请参阅 实例运行状况

问:我需要为部署指定哪些参数?
您需要为部署指定 3 个参数:

  1. 修订版 – 指定要部署的内容。
  2. 部署组 – 指定部署的位置。
  3. 部署配置 – 可选参数,指定部署方式。

AppSpec 文件是一种配置文件,用于指定待复制文件和待执行脚本。AppSpec 文件使用 YAML 格式,您将其包含在您的修订版的根目录下。AppSpec 文件供 Amazon CodeDeploy 代理所用,并由两个部分组成。“files”部分指定了您的修订版中待复制的源文件,以及每个实例的目标文件夹。“hooks”部分指定了在部署各阶段运行的脚本的位置(作为从修订包根下起始的相对路径)。部署的各个阶段均被称为部署生命周期事件。下面是示例 AppSpec 文件。有关 AppSpec 文件的信息,包括可指定的所有选项,请参阅 AppSpec 文件参考

version: 0.0

os: linux

files: 

# 可以在“files”部分中指定一个或多个映射。

  - source: /

    destination: /var/www/html/WordPress

hooks:

 # 使用生命周期的“hooks”部分,您可以指定部署脚本。

ApplicationStop: 

# 第 1 步:如果 Apache 和 MySQL 正在运行,请将它们停止。

    - location: helper_scripts/stop_server.sh

BeforeInstall: 

# 第 2 步:安装 Apache 和 MySQL。

# 您可以为每个部署生命周期事件指定一个或多个脚本。

    - location: deploy_hooks/puppet-apply-apache.sh

    - location: deploy_hooks/puppet-apply-mysql.sh 

 AfterInstall: 

# 第 3 步:设置权限。

    - location: deploy_hooks /change_permissions.sh

      timeout: 30

      runas: root

# 第 4 步:启动服务器。

    - location: helper_scripts/start_server.sh

      timeout: 30

      runas: root

部署会经历一组预定义阶段,称之为部署生命周期事件。部署生命周期事件可让您将代码作为部署的一部分运行。下表以执行顺序列出了目前支持的各种不同的部署生命周期事件,以及您可能想使用它们的时间示例。

部署生命周期事件 说明
ApplicationStop

这是下载修订版之前发生的第一个部署生命周期事件。用于此部署生命周期事件的 AppSpec 文件和脚本来自于上一次成功部署的修订版。 

如果要顺利地停止应用程序或删除部署准备中当前已安装的软件包,您可以使用 ApplicationStop 部署生命周期事件。

DownloadBundle 在此部署生命周期事件期间,代理程序将修订版文件复制到实例上的临时位置。此部署生命周期事件是为代理程序预留的,不能用于运行用户脚本。
BeforeInstall 您可以使用 BeforeInstall 部署生命周期事件执行文件解密和当前版本的备份创建等预安装任务。
Install 在此部署生命周期事件期间,代理程序将修订版本文件从临时位置复制到最终目标文件夹。此部署生命周期事件是为代理程序预留的,不能用于运行用户脚本。
AfterInstall 您可以使用 AfterInstall 部署生命周期事件来执行应用程序配置或文件权限变更等任务。
ApplicationStart 通常情况下,您需要使用 ApplicationStart 部署生命周期事件来重新启动在 ApplicationStop 期间停止的服务。
ValidateService ValidateService 是最后一个部署生命周期事件,您可以借此机会确认已成功完成部署。

入门

全部打开

您可以登录到亚马逊云科技管理控制台,并开始使用 Amazon CodeDeploy。如果要快速了解该服务,请参阅入门,其中包含了分步教程。

使用 Amazon CodeDeploy

全部打开

Amazon EC2 实例必须与 IAM 实例配置文件关联并运行支持的操作系统。有关更多信息,请参阅使用现有 Amazon EC2 实例

下图显示了部署期间的一般步骤。创建应用程序和部署组(有关术语的解释,请参阅概念部分)通常是需要为每个应用程序完成的一次性设置任务。进行循坏操作会上传修订版并部署该版本。有关上述每项任务的详细说明,以及分步说明,请参阅部署

您可以使用亚马逊云科技管理控制台、亚马逊软件开发工具包Amazon CodeDeploy API 来访问 Amazon CodeDeploy。

您不需要对您的代码作任何更改。您只需在修订版捆绑包的根目录中添加一个配置文件(称作 AppSpec 文件),用于指定待复制文件和待执行脚本。

如果您使用的是 GitHub,您可以通过 .zip、.tar 或 .tar.gz 格式将修订版从您的存储库直接部署到实例中。对于其他源代码控制系统,您可以通过 .zip、.tar 或 .tar.gz 格式捆绑修订版并将其上传到 Amazon S3 存储桶中,并在进行部署时指定 Amazon S3 的位置。如果您的应用程序需要一个构建步骤,请确保 GitHub 存储库或 Amazon S3 存储桶中包含构建后项目。有关如何使用 Amazon S3 存储修订版的更多信息,请参阅推送修订版

您可以从 AppSpec 文件中的任何部署生命周期事件钩子中调用您的配置管理工具。举例来说,如果您有一个想作为部署的一部分运行的 Chef 配方,您可以在 AppSpec 文件的适当部署生命周期事件钩子中指定该配方,以执行此操作。此外,您还可以利用您的配置管理系统,在实例上安装 Amazon CodeDeploy 代理。

可以。通过使用亚马逊云科技软件开发工具包来调用公共 API,您可以将 Amazon CodeDeploy 与您的持续集成和部署系统集成在一起。

将最新修订版部署到部署组中,从而将您的应用程序置于新添加的实例上。除了作为 Auto Scaling 组的一部分启动的 Amazon EC2 实例之外,Amazon CodeDeploy 不会将最新修订版自动部署到新添加的实例中。

您可以将 Auto Scaling 组与部署组关联在一起,从而确保新启动的实例始终会获得应用程序的最新修订版。每当该 Auto Scaling 组有新的 Amazon EC2 实例启动时,它首先将处于“Pending”状态,且该部署组的最后一次成功修订版的部署会在该 Amazon EC2 实例上触发。如果该部署成功完成,Amazon EC2 实例的状态将更改为“正在服务”。如果该部署失败,Amazon EC2 实例终止,新的 Amazon EC2 实例会以“待处理”状态启动,且部署会在新启动的 EC2 实例上触发。有关 Auto Scaling 组实例生命周期事件的更多信息,请参阅 Auto Scaling 组生命周期

您可以使用亚马逊云科技管理控制台、亚马逊开发工具包Amazon CodeDeploy API 来跟踪部署状态。您还可以查看整体部署状态,并进一步深入了解每个实例的状态以及实例的每个部署生命周期事件的状态。您还可以查看任何故障所对应的日志条目,从而轻松调试部署问题,无需登录实例。

可以。当您停止正在进行的部署时,Amazon CodeDeploy 服务会指示每个实例上的代理停止执行其他的脚本。要使您的应用程序回到一致状态,您可以重新部署该修订版或部署另一个修订版。

要使应用程序回滚到上一修订版,您只需要部署该修订版即可。 Amazon CodeDeploy 会跟踪为当前修订版复制的文件,并在开始新的部署之前移除这些文件,因此重新部署与回滚没有任何区别。然而,您需要确保上一修订版可用于回滚。

可以。您可以使用获得版本控制的 Amazon S3 存储桶并通过指定版本 ID 来唯一标识修订版。

有关服务限制的信息,请参阅限制。要提高服务限制,请通过管理控制台中的亚马逊云科技支持中心来提交请求。

可以。要获取您的账户发起的 Amazon CodeDeploy API 调用的历史记录,您只需在亚马逊云科技管理控制台中打开 Amazon CloudTrail。

安全性

全部打开

可以,但安装在 Amazon EC2 实例上的 Amazon CodeDeploy 代理必须能够访问公共 Amazon CodeDeploy 和 Amazon S3 服务端点。有关详情,请参阅中国区域的亚马逊云科技端点

可以。 Amazon CodeDeploy 支持资源级权限。对于每个 Amazon CodeDeploy 资源,您可以指定哪个用户对其拥有访问权限以及每个资源可用于执行哪些操作。例如,您可以设置一项 IAM 策略使用户部署一个特定的应用程序,但只列出其他应用程序的修订版。这样,您可以防止用户意外更改错误应用程序。要详细了解如何将 IAM 与 Amazon CodeDeploy 结合使用,请参阅访问权限参考

区域

全部打开

有关 CodeDeploy 在不同区域的具体提供情况,请参阅区域性产品和服务