

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

# 在中处理部署 CodeDeploy
<a name="deployments"></a>

在中 CodeDeploy，部署是在一个或多个实例上安装内容的过程以及该过程中涉及的组件。此内容可以包括代码、Web 和配置文件、可执行文件、软件包、脚本等。 CodeDeploy 根据您指定的配置规则部署存储在源存储库中的内容。

 如果您使用 EC2/本地计算平台，则可以同时运行相同实例组的两个部署。

CodeDeploy 提供了两种部署类型选项：就地部署和蓝/绿部署。
+ **就地部署**：停止部署组中每个实例上的应用程序，安装最新的应用程序修订，然后启动和验证应用程序的新版本。您可以使用负载均衡器，以便在部署期间取消注册每个实例，然后在部署完成后让其重新提供服务。只有使用 EC2/本地计算平台的部署才能使用就地部署。有关就地部署的更多信息，请参阅[就地部署概述](welcome.md#welcome-deployment-overview-in-place)。
+ **蓝绿部署**：部署的行为取决于使用的计算平台：
  + **Blue/green on an EC2/On-本地计算平台**：使用以下步骤将部署组（原始环境）中的实例替换为另一组实例（替换环境）：
    + 为替换环境配置实例。
    + 在替换实例上安装最新的应用程序修订。
    + 对于应用程序测试和系统验证等活动，可以选择等待时间。
    + 替换环境中的实例在一个或多个 Elastic Load Balancing 负载均衡器中注册，从而导致流量被重新路由到这些负载均衡器。原始环境中的实例已注销，可以终止或继续运行以用于其他用途。
**注意**  
如果您使用 EC2/本地计算平台，请注意 blue/green 部署仅适用于 Amazon EC2 实例。
  + 或 ** AWS Lambda Amazon ECS 计算平台上的蓝/绿**：流量根据**金丝雀**、**线性**或**all-at-once**部署配置逐渐移动。
  + **蓝/绿部署通过 CloudFormation**：作为 CloudFormation 堆栈更新的一部分，流量将从您当前的资源转移到更新的资源。当前，仅支持 ECS blue/green 部署。

  有关 blue/green 部署的更多信息，请参阅[blue/green 部署概述](welcome.md#welcome-deployment-overview-blue-green)。

有关从 Amazon S3 自动部署的信息，请参阅[使用自动从 Amazon S3 进行部](https://aws.amazon.com/blogs/devops/automatically-deploy-from-amazon-s3-using-aws-codedeploy/)署 CodeDeploy。

**Topics**
+ [创建 部署。](deployments-create.md)
+ [查看部署详细信息](deployments-view-details.md)
+ [查看部署日志数据](deployments-view-logs.md)
+ [停止部署](deployments-stop.md)
+ [重新部署和回滚部署](deployments-rollback-and-redeploy.md)
+ [在其他 AWS 账户中部署应用程序](deployments-cross-account.md)
+ [验证本地机器上的部署程序包](deployments-local.md)

# 使用创建部署 CodeDeploy
<a name="deployments-create"></a>

您可以使用 CodeDeploy 控制台 AWS CLI、或 CodeDeploy API 创建部署，该部署将您已经推送到 Amazon S3 的应用程序修订版安装在部署组中的实例上，如果您的部署是 EC2/本地计算平台 GitHub，则安装在部署组中的实例上。

创建部署的过程取决于部署使用的计算平台。

**Topics**
+ [部署先决条件](deployments-create-prerequisites.md)
+ [创建 Amazon ECS 计算平台部署（控制台）](deployments-create-console-ecs.md)
+ [创建 L AWS ambda 计算平台部署（控制台）](deployments-create-console-lambda.md)
+ [创建 EC2/本地计算平台部署（控制台）](deployments-create-console.md)
+ [创建 Amazon ECS 计算平台部署（CLI）](deployments-create-ecs-cli.md)
+ [创建 L AWS ambda 计算平台部署 (CLI)](deployments-create-lambda-cli.md)
+ [创建 EC2/本地计算平台部署（CLI）](deployments-create-cli.md)
+ [通过创建 Amazon ECS blue/green 部署 CloudFormation](deployments-create-ecs-cfn.md)

# 部署先决条件
<a name="deployments-create-prerequisites"></a>

在您开始部署之前，请确保完成以下步骤。

## AWS Lambda 计算平台上的部署先决条件
<a name="deployment-prerequisites-lambda"></a>
+ 创建一个应用程序，其中至少包括一个部署组。有关更多信息，请参阅 [使用创建应用程序 CodeDeploy](applications-create.md) 和 [使用创建部署组 CodeDeploy](deployment-groups-create.md)。
+ 准备应用程序修订（也称为 AppSpec 文件），用于指定要部署的 Lambda 函数版本。该 AppSpec 文件还可以指定 Lambda 函数来验证您的部署。有关更多信息，请参阅 [正在处理的应用程序修订版 CodeDeploy](application-revisions.md)。
+ 如果要将自定义部署配置用于您的部署，请在开始部署过程之前创建配置。有关信息，请参阅[使用创建部署配置 CodeDeploy](deployment-configurations-create.md)。

## EC2/本地计算平台上的部署先决条件
<a name="deployment-prerequisites-server"></a>
+ 对于就地配置，创建或配置要部署到的实例。有关信息，请参阅[使用以下实例 CodeDeploy](instances.md)。对于 blue/green 部署，您要么有一个现有 Amazon EC2 Auto Scaling 组用作替换环境的模板，要么有一个或多个实例或 Amazon EC2 Auto Scaling 组指定为原始环境。有关更多信息，请参阅[教程：用于 CodeDeploy 将应用程序部署到 Auto Scaling 组](tutorials-auto-scaling-group.md)和[CodeDeploy 与亚马逊 EC2 Auto Scaling 集成](integrations-aws-auto-scaling.md)。
+ 创建一个应用程序，其中至少包括一个部署组。有关更多信息，请参阅 [使用创建应用程序 CodeDeploy](applications-create.md) 和 [使用创建部署组 CodeDeploy](deployment-groups-create.md)。
+ 准备好要部署到部署组中的实例的应用程序修订。有关信息，请参阅[正在处理的应用程序修订版 CodeDeploy](application-revisions.md)。
+ 如果要将自定义部署配置用于您的部署，请在开始部署过程之前创建配置。有关信息，请参阅[使用创建部署配置 CodeDeploy](deployment-configurations-create.md)。
+ 如果您从 Amazon S3 存储桶部署应用程序修订，则该存储桶与您的部署组中的实例位于同一 AWS 区域。
+ 如果您要从 Amazon S3 存储桶部署应用程序修订，可对该存储桶应用 Amazon S3 存储桶策略。此策略为您的实例授予下载应用程序修订所需的权限。

  例如，以下 Amazon S3 存储桶策略允许从名为 `amzn-s3-demo-bucket` 的 Amazon S3 存储桶中的任何位置，下载附加了 IAM 实例配置文件（其中包含 ARN `arn:aws:iam::444455556666:role/CodeDeployDemo`）的任意 Amazon EC2 实例：

  ```
  {
      "Statement": [
          {
              "Action": [
                  "s3:Get*",
                  "s3:List*"
              ],
              "Effect": "Allow",
              "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
              "Principal": {
                  "AWS": [
                      "arn:aws:iam::444455556666:role/CodeDeployDemo"
                  ]
              }
          }
      ]
  }
  ```

  以下 Amazon S3 存储桶策略允许从名为 `amzn-s3-demo-bucket` 的 Amazon S3 存储桶中的任意位置，下载具有关联 IAM 用户（其中包含 ARN `arn:aws:iam::444455556666:user/CodeDeployUser`）的任意本地实例：

  ```
  {
      "Statement": [
          {
              "Action": [
                  "s3:Get*",
                  "s3:List*"
              ],
              "Effect": "Allow",
              "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
              "Principal": {
                  "AWS": [
                      "arn:aws:iam::444455556666:user/CodeDeployUser"
                  ]
              }
          }
      ]
  }
  ```

  有关如何生成和附加 Amazon S3 存储桶策略的信息，请参阅[存储桶策略示例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)。
+ 如果您正在创建 blue/green 部署，或者在部署组中为就地部署指定了可选的 Classic Load Balancer、Application Load Balancer 或 Network Load Balancer，则您已经使用 Amazon VPC 创建了一个包含至少两个子网的 VPC。 （CodeDeploy 使用 Elastic Load Balancing，它要求负载均衡器组中的所有实例都位于单个 VPC 中。）

  如果您尚未创建 VPC，请参阅 [Amazon VPC 入门指南](https://docs.aws.amazon.com/AmazonVPC/latest/GettingStartedGuide/ExerciseOverview.html)。
+ 如果您正在创建 blue/green 部署，则您已在 Elastic Load Balancing 中配置了至少一个 Classic Load Balancing、Application Load Balancing 或网络负载均衡器，并使用它来注册构成原始环境的实例。
**注意**  
替换环境中的实例稍后将用这个负载均衡器进行注册。

  有关配置负载均衡器的更多信息，请参阅[在 Elastic Load Balancing 中为 CodeDeploy Amazon EC2 部署设置负载均衡器](deployment-groups-create-load-balancer.md)和[为 A CodeDeploy mazon ECS 部署设置负载均衡器、目标组和侦听器](deployment-groups-create-load-balancer-for-ecs.md)。

## 通过以下方式进行部署的 blue/green 部署先决条件 CloudFormation
<a name="deployment-prerequisites-cfn-bg"></a>
+ 您的模板不需要为 CodeDeploy 应用程序或部署组对资源进行建模。
+ 对于至少包含两个子网且使用 Amazon VPC 的 VPC，您的模板必须包含相应资源。
+ 您的模板必须在 Elastic Load Balancing 中包含一个或多个经典负载均衡器、应用程序负载均衡器或网络负载均衡器的资源，用于将流量定向到目标群组。

# 创建 Amazon ECS 计算平台部署（控制台）
<a name="deployments-create-console-ecs"></a>

本主题介绍了如何使用控制台部署 Amazon ECS 服务。有关更多信息，请参阅[教程：将应用程序部署到 Amazon ECS](tutorial-ecs-deployment.md)和[教程：部署具有验证测试的 Amazon ECS 服务](tutorial-ecs-deployment-with-hooks.md)。

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 请执行以下操作之一：
   +  如果要部署应用程序，请在导航窗格中，展开 **Deploy（部署）**，然后选择 **Applications（应用程序）**。选择要部署的应用程序的名称。确保您的应用程序的**计算平台**列为 **Amazon ECS**。
   +  如果要重新部署某个部署，请在导航窗格中展开 **Deploy（部署）**，然后选择 **Deployments（部署）**。选择要重新部署的部署并在 **Application（应用程序）**列中选择其应用程序的名称。确保您的部署的**计算平台**列为 **Amazon ECS**。

1. 在**部署**选项卡上，选择**创建部署**。
**注意**  
您的应用程序必须具有部署组才能部署。如果您的应用程序没有部署组，请在**部署组**选项卡上选择**创建部署组**。有关更多信息，请参阅 [使用创建部署组 CodeDeploy](deployment-groups-create.md)。

1. 在 **Deployment group（部署组）**中，选择要用于此部署的部署组。

1. 在 **Revision location（修订位置）**旁边，选择您的修订所在的位置：
   + **我的应用程序存储在 Amazon S3 中** - 有关信息，请参阅[指定存储在 Amazon S3 存储桶中的修订的相关信息](deployments-create-console-s3.md)，然后返回步骤 6。
   + **使用 AppSpec 编辑器**-选择 JSON 或 YAML，然后在编辑器中输入您的 AppSpec 文件。您可以通过选择 “另存**为文本 AppSpec 文件” 来保存该文件**。如果您在这些步骤结束时选择 **Deploy（部署）**，并且您的 JSON 或 YAML 无效，则您将收到错误。有关创建 AppSpec 文件的更多信息，请参阅[将应用程序规范文件添加到修订版中 CodeDeploy](application-revisions-appspec-file.md)。

1. （可选）在 **Deployment description（部署描述）**框中，输入此部署的描述。

1. （可选）在 **Rollback configuration overrides** 中，您可以为此部署指定与已为部署组指定的选项（如果有）不同的自动回滚选项。

   有关中回滚的信息 CodeDeploy，请参阅[重新部署和部署回滚](deployment-steps-lambda.md#deployment-rollback-lambda)和。[使用重新部署和回滚部署 CodeDeploy](deployments-rollback-and-redeploy.md)

   请从以下内容中选择：
   + **部署失败时回滚 — 将最后一个**已知良好的修订版 CodeDeploy重新部署为新部署。
   + **达到警报阈值时回滚**-如果警报已添加到部署组，则在激活一个或多个指定警报时 CodeDeploy 重新部署上次已知的良好版本。
   + **禁用回滚** — 不为此部署执行回滚。

1. 选择 **Create deployment（创建部署）**。

   要跟踪部署的状态，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

# 创建 L AWS ambda 计算平台部署（控制台）
<a name="deployments-create-console-lambda"></a>

本主题介绍了如何使用控制台部署 Lambda 函数。

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 请执行以下操作之一：
   +  如果要部署应用程序，请在导航窗格中，展开 **Deploy（部署）**，然后选择 **Applications（应用程序）**。选择要部署的应用程序的名称。确保您的应用程序的**计算平台**列为 **AWS Lambda**。
   +  如果要重新部署某个部署，请在导航窗格中展开 **Deploy（部署）**，然后选择 **Deployments（部署）**。选择要重新部署的部署并在 **Application（应用程序）**列中选择其应用程序的名称。确保您的部署的**计算平台**列为 **AWS Lambda**。

1. 在**部署**选项卡上，选择**创建部署**。
**注意**  
您的应用程序必须具有部署组才能部署。如果您的应用程序没有部署组，请在**部署组**选项卡上选择**创建部署组**。有关更多信息，请参阅 [使用创建部署组 CodeDeploy](deployment-groups-create.md)。

1. 在 **Deployment group（部署组）**中，选择要用于此部署的部署组。

1. 在 **Revision location（修订位置）**旁边，选择您的修订所在的位置：
   + **我的应用程序存储在 Amazon S3 中** - 有关信息，请参阅[指定存储在 Amazon S3 存储桶中的修订的相关信息](deployments-create-console-s3.md)，然后返回步骤 6。
   + **使用 AppSpec 编辑器**-选择 JSON 或 YAML，然后在编辑器中输入您的 AppSpec 文件。您可以通过选择 “另存**为文本 AppSpec 文件” 来保存该文件**。如果您在这些步骤结束时选择 **Deploy（部署）**，并且您的 JSON 或 YAML 无效，则您将收到错误。有关创建 AppSpec 文件的更多信息，请参阅[将应用程序规范文件添加到修订版中 CodeDeploy](application-revisions-appspec-file.md)。

1. （可选）在 **Deployment description（部署描述）**框中，输入此部署的描述。

1. （可选）展开**部署组覆盖**以选择一个不同于部署组中指定项的部署配置，来控制流量如何转移到 Lambda 函数版本。

   有关更多信息，请参阅 [AWS Lambda 计算平台上的部署配置](deployment-configurations.md#deployment-configuration-lambda)。

1. （可选）在 **Rollback configuration overrides** 中，您可以为此部署指定与已为部署组指定的选项（如果有）不同的自动回滚选项。

   有关中回滚的信息 CodeDeploy，请参阅[重新部署和部署回滚](deployment-steps-lambda.md#deployment-rollback-lambda)和。[使用重新部署和回滚部署 CodeDeploy](deployments-rollback-and-redeploy.md)

   请从以下内容中选择：
   + **部署失败时回滚 — 将最后一个**已知良好的修订版 CodeDeploy重新部署为新部署。
   + **达到警报阈值时回滚**-如果警报已添加到部署组，则在激活一个或多个指定警报时 CodeDeploy 重新部署上次已知的良好版本。
   + **禁用回滚** — 不为此部署执行回滚。

1. 选择 **Create deployment（创建部署）**。

   要跟踪部署的状态，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

# 创建 EC2/本地计算平台部署（控制台）
<a name="deployments-create-console"></a>

本主题介绍了如何使用控制台将应用程序部署到 Amazon EC2 或本地服务器。

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 请执行以下操作之一：
   +  如果要部署应用程序，请在导航窗格中，展开 **Deploy（部署）**，然后选择 **Applications（应用程序）**。选择要部署的应用程序的名称。确保您的应用程序的**计算平台**列为 **EC2/本地**。
   +  如果要重新部署某个部署，请在导航窗格中展开 **Deploy（部署）**，然后选择 **Deployments（部署）**。找到要重新部署的部署，然后在 **Application（应用程序）**列中选择其应用程序的名称。确保您的部署的**计算平台**列为 **EC2/本地**。

1. 在**部署**选项卡上，选择**创建部署**。
**注意**  
您的应用程序必须具有部署组才能部署。如果您的应用程序没有部署组，请在**部署组**选项卡上选择**创建部署组**。有关更多信息，请参阅 [使用创建部署组 CodeDeploy](deployment-groups-create.md)。

1. 在 **Deployment group（部署组）**中，选择要用于此部署的部署组。

1. 在 **Repository type** 旁边，选择保存您的修订的存储库类型：
   + **我的应用程序存储在 Amazon S3 中** - 有关信息，请参阅[指定存储在 Amazon S3 存储桶中的修订的相关信息](deployments-create-console-s3.md)，然后返回步骤 6。
   + **我的应用程序存储在 GitHub** — 有关信息，请参阅[指定存储在存储 GitHub 库中的修订的相关信息](deployments-create-console-github.md)，然后返回到步骤 6。

1. （可选）在 **Deployment description（部署描述）**框中，输入此部署的描述。

1. （可选）展开**覆盖部署配置**以选择一个不同于部署组中指定项的部署配置，来控制流量如何转移到 Amazon EC2 或本地服务器。

   有关更多信息，请参阅 [在中使用部署配置 CodeDeploy](deployment-configurations.md)。

1. 

   1. **如果您希望在 ApplicationStop生命周期事件失败时成功部署到实例，请选择`ApplicationStop`生命周期事件失败时不要**使部署失败。

   1. 展开**其他部署行为设置**以指定如何 CodeDeploy 处理部署目标位置中不属于先前成功部署的文件。

      请从以下内容中选择：
      + **使部署失败** - 系统报告出错，并且部署状态更改为 `Failed`。
      + **覆盖内容** - 如果目标位置存在同名文件，则来自应用程序修订的版本将替换它。
      + **保留内容** - 如果目标位置存在同名文件，则该文件将保留，并且应用程序修订中的版本不会复制到实例。

      有关更多信息，请参阅 [现有内容的回滚行为](deployments-rollback-and-redeploy.md#deployments-rollback-and-redeploy-content-options)。

1. （可选）在 **Rollback configuration overrides** 中，您可以为此部署指定与已为部署组指定的选项（如果有）不同的自动回滚选项。

   有关中回滚的信息 CodeDeploy，请参阅[重新部署和部署回滚](deployment-steps-server.md#deployment-rollback)和。[使用重新部署和回滚部署 CodeDeploy](deployments-rollback-and-redeploy.md)

   请从以下内容中选择：
   + **部署失败时回滚 — 将最后一个**已知良好的修订版 CodeDeploy重新部署为新部署。
   + **达到警报阈值时回滚**-如果警报已添加到部署组， CodeDeploy 则在激活一个或多个指定警报时部署上次已知的良好版本。
   + **禁用回滚** — 不为此部署执行回滚。

1. 选择**开始部署**。

   要跟踪部署的状态，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

**Topics**
+ [指定存储在 Amazon S3 存储桶中的修订的相关信息](deployments-create-console-s3.md)
+ [指定存储在存储 GitHub 库中的修订的相关信息](deployments-create-console-github.md)

# 指定存储在 Amazon S3 存储桶中的修订的相关信息
<a name="deployments-create-console-s3"></a>

如果您正在执行[创建 EC2/本地计算平台部署（控制台）](deployments-create-console.md)中的步骤，请遵循这些步骤以添加有关存储在 Amazon S3 存储桶中的应用程序修订的详细信息。

1. 将您的修订的 Amazon S3 链接复制到**修订位置**。要查找链接值，请执行以下操作：

   1. 在单独的浏览器选项卡中：

      登录 AWS 管理控制台 并打开 Amazon S3 控制台，网址为[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

      浏览并选择您的修订。

   1. 如果 **Properties** 窗格不可见，请选择 **Properties** 按钮。

   1. 在 “**属性**” 窗格中，将 “**链接**” 字段的值复制到 CodeDeploy 控制台的 “**修订位置**” 框中。

   要指定 ETag （文件校验和）作为修订位置的一部分，请执行以下操作：
   + 如果**链接**字段的值 ETag 以结尾 **?versionId=*versionId*****&etag=**，请在**链接**字段值的末尾添加和。
   + 如果 “**链接**” 字段值未指定版本 ID，请在 “ ETag **链接**” 字段值的末尾添加**?etag=**和。
**注意**  
您并不一定需要复制 **Link** 字段的值，也可以使用下列格式之一键入修订位置：  
**s3://*bucket-name*/*folders*/*objectName***  
**s3://*bucket-name*/*folders*/*objectName*?versionId=*versionId***  
**s3://*bucket-name*/*folders*/*objectName*?etag=*etag***  
**s3://*bucket-name*/*folders*/*objectName*?versionId=*versionId*&etag=*etag***  
***bucket-name*.s3.amazonaws.com/*folders*/*objectName***

1. 如果 **File type** 列表中显示的消息说明无法检测文件类型，则选择修订的文件类型。否则，请接受检测到的文件类型。

# 指定存储在存储 GitHub 库中的修订的相关信息
<a name="deployments-create-console-github"></a>

如果您正在按照中的步骤操作[创建 EC2/本地计算平台部署（控制台）](deployments-create-console.md)，请按照以下步骤添加有关存储在存储 GitHub 库中的应用程序修订的详细信息。

1. 在 **Connect t** o 中 GitHub，执行以下任一操作：
   + 要创建 CodeDeploy 应用程序与 GitHub 帐户的连接，请在不同的 Web 浏览器选项卡中注销 GitHub。在**GitHub 帐户**中，输入用于标识此连接的名称，然后选择 **Connect to GitHub**。该网页会提示您授权 CodeDeploy 与您的应用程序进行交互。 GitHub 继续执行步骤 2。
   + 要使用已创建的连接，请在**GitHub帐户**中选择其名称，然后选择 **Connect to GitHub**。继续执行步骤 4。
   + 要创建与其他 GitHub 帐户的连接，请在不同的 Web 浏览器选项卡中注销 GitHub。选择 “**连接到其他 GitHub 帐户**”，然后选择 “**连接到**” GitHub。继续执行步骤 2。

1. 如果系统提示您登录 GitHub，请按照 “**登录**” 页面上的说明进行操作。使用您的 GitHub 用户名或电子邮件和密码登录。

1. 如果显示 **Authorize application（授权应用程序）**页面，则选择 **Authorize application（授权应用程序）**。

1. 在 “**创建部署**” 页面的 “**存储库名称**” 框中，输入包含修订的 GitHub 用户或组织名称，然后输入正斜杠 (`/`)，然后输入包含该修订的存储库的名称。如果您不确定要键入的值，请执行以下步骤：

   1. 在另一个 Web 浏览器选项卡中，转到您的[GitHub控制面板](https://github.com/dashboard)。

   1. 在 **Your repositories（您的资料库）**中，将鼠标指针悬停在目标存储库名称的上方。将出现一个工具提示，显示 GitHub 用户或组织名称，后跟正斜杠 (`/`)，后跟存储库的名称。将显示的此值输入 **Repository name（存储库名称）**框中。
**注意**  
如果目标存储库名称在 “**您的存储库**” 中不可见，请使用 GitHub “**搜索**” 框查找目标存储库名称以及 GitHub 用户或组织名称。

1. 在 **Commit ID（提交 ID）**框中，输入引用存储库中修订的提交的 ID。如果您不确定要键入的值，请执行以下步骤：

   1. 在另一个 Web 浏览器选项卡中，转到您的[GitHub控制面板](https://github.com/dashboard)。

   1. 在 **Your repositories（您的存储库）**中，选择包含目标提交的存储库名称。

   1. 在提交列表中，找到并复制引用存储库中修订的提交 ID。此 ID 的长度通常为 40 个字符并包含字母和数字。（请勿使用提交 ID 的简短版本，此版本通常包含更长版本提交 ID 的前 10 个字符。）

   1. 将提交 ID 粘贴到 **Commit ID** 框中。

# 创建 Amazon ECS 计算平台部署（CLI）
<a name="deployments-create-ecs-cli"></a>

在您创建了应用程序和修订版之后（在 Amazon ECS 部署中，这是 AppSpec 文件）：

调用 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令，并指定：
+ 应用程序名称。要查看应用程序名称的列表，请调用 [list-applications](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-applications.html) 命令。
+ 部署组名称。要查看部署组名称的列表，请调用 [list-deployment-groups](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-groups.html) 命令。
+ 有关要部署的修订的信息：

  对于存储在 Amazon S3 中的修订：
  + 包含修订的 Amazon S3 存储桶名称。
  + 已上传修订的名称。
  + （可选）修订的 Amazon S3 版本标识符。（如果未指定版本标识符，则 CodeDeploy 使用最新版本。）
  + （可选） ETag 适用于修订版。（如果未指定，则 CodeDeploy 跳过对象验证。） ETag 

  对于不在 Amazon S3 中的文件内存储的修订，您需要文件名及其路径。您的修订文件是使用 JSON 或 YAML 编写的，因此扩展名很可能为 .json 或 .yaml。
+ （可选）部署的说明。

修订文件可指定为上传到 Amazon S3 存储桶的文件，也可以指定为字符串。在用作 **create-deployment** 命令的一部分时，各自的语法为
+ Amazon S3 存储桶：

  `version` 和 `eTag` 是可选的。

  ```
  --s3-location bucket=string,key=string,bundleType=JSON|YAML,version=string,eTag=string
  ```
+ 字符串：

  ```
  --revision '{"revisionType": "String", "string": {"content":"revision-as-string"}}'
  ```

**注意**  
**create-deployment** 命令可以从文件加载修订。有关更多信息，请参阅[从文件中加载参数](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#cli-using-param-file)。

有关 AWS Lambda 部署修订版模板的信息，请参阅[为 AWS Lambda 部署添加 AppSpec 文件](application-revisions-appspec-file.md#add-appspec-file-lambda)。有关示例修订，请参阅[AppSpec AWS Lambda 部署的文件示例](reference-appspec-file-example.md#appspec-file-example-lambda)。

要跟踪部署的状态，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

# 创建 L AWS ambda 计算平台部署 (CLI)
<a name="deployments-create-lambda-cli"></a>



创建应用程序和修订后（在 AWS Lambda 部署中，这是 AppSpec 文件）：

调用 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令，并指定：
+ 应用程序名称。要查看应用程序名称的列表，请调用 [list-applications](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-applications.html) 命令。
+ 部署组名称。要查看部署组名称的列表，请调用 [list-deployment-groups](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-groups.html) 命令。
+ 有关要部署的修订的信息：

  对于存储在 Amazon S3 中的修订：
  + 包含修订的 Amazon S3 存储桶名称。
  + 已上传修订的名称。
  + （可选）修订的 Amazon S3 版本标识符。（如果未指定版本标识符，则 CodeDeploy 使用最新版本。）
  + （可选） ETag 适用于修订版。（如果未指定，则 CodeDeploy 跳过对象验证。） ETag 

  对于不在 Amazon S3 中的文件内存储的修订，您需要文件名及其路径。您的修订文件是使用 JSON 或 YAML 编写的，因此扩展名很可能为 .json 或 .yaml。
+ （可选）要使用的部署配置的名称。要查看部署配置的列表，请调用 [list-deployment-configs](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-configs.html) 命令。（如果未指定，则 CodeDeploy 使用特定的默认部署配置。）
+ （可选）部署的说明。

修订文件可指定为上传到 Amazon S3 存储桶的文件，也可以指定为字符串。在用作 **create-deployment** 命令的一部分时，各自的语法为
+ Amazon S3 存储桶：

  `version` 和 `eTag` 是可选的。

  ```
  --s3-location bucket=string,key=string,bundleType=JSON|YAML,version=string,eTag=string
  ```
+ 字符串：

  ```
  --revision '{"revisionType": "String", "string": {"content":"revision-as-string"}}'
  ```

**注意**  
**create-deployment** 命令可以从文件加载修订。有关更多信息，请参阅[从文件中加载参数](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html#cli-using-param-file)。

有关 AWS Lambda 部署修订版模板的信息，请参阅[为 AWS Lambda 部署添加 AppSpec 文件](application-revisions-appspec-file.md#add-appspec-file-lambda)。有关示例修订，请参阅[AppSpec AWS Lambda 部署的文件示例](reference-appspec-file-example.md#appspec-file-example-lambda)。

要跟踪部署的状态，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

# 创建 EC2/本地计算平台部署（CLI）
<a name="deployments-create-cli"></a>

要使用将修订版部署 AWS CLI 到 EC2/本地计算平台，请执行以下操作：

1. 在您准备好了实例之后，创建应用程序，然后推送修订，执行以下操作之一：
   + 如果您希望从 Amazon S3 存储桶部署修订，请立即继续执行步骤 2。
   + 如果要从 GitHub 存储库部署修订，请先完成中的步骤[将 CodeDeploy 应用程序连接到存储 GitHub 库](deployments-create-cli-github.md)，然后继续执行步骤 2。

1. 调用 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 命令，并指定：
   + `--application-name`：应用程序名称。要查看应用程序名称的列表，请调用 [list-applications](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-applications.html) 命令。
   + `--deployment-group-name`：Amazon EC2 部署组的名称。要查看部署组名称的列表，请调用 [list-deployment-groups](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-groups.html) 命令。
   + `--revision`：有关要部署的修订的信息：

     对于存储在 Amazon S3 中的修订：
     + `s3Location`：包含修订的 Amazon S3 存储桶名称。
     + `s3Location --> key`：已上传修订的名称。
     + `s3Location --> bundleType`：已上传修订的文件类型。
**注意**  
Windows Server 实例不支持 tar 和压缩的 tar 存档文件格式（.tar 和.tar.gz）。
     + `s3Location --> version`：（可选）修订的 Amazon S3 版本标识符。（如果未指定版本标识符，则 CodeDeploy 使用最新版本。）
     + `s3Location --> eTag`:（可选） ETag 适用于修订版。（如果未指定，则 CodeDeploy 跳过对象验证。） ETag 

     对于存储在 GitHub以下位置的修订版本：
     + `gitHubLocation --> repository`：分配给包含修订的存储库的 GitHub 用户名或组名，后跟正斜杠 (`/`)，后跟存储库名称。
     + `gitHubLocation --> commitId`：修订的提交 ID。
   + `--deployment-config-name`：（可选）要使用的部署配置的名称。要查看部署配置的列表，请调用 [list-deployment-configs](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-configs.html) 命令。（如果未指定，则 CodeDeploy 使用特定的默认部署配置。）
   + `--ignore-application-stop-failures | --no-ignore-application-stop-failures`：（可选）您是否希望当 `ApplicationStop` 部署生命周期事件失败时，实例的部署仍继续 `BeforeInstall` 部署生命周期事件。
   + `--description`：（可选）部署的说明。
   + `--file-exists-behavior`:（可选）作为部署过程的一部分， CodeDeploy 代理会从每个实例中删除最新部署安装的所有文件。选择当不属于先前部署的文件出现在目标部署位置时会发生什么。
   + `--target-instances`：对于 blue/green 部署，有关 blue/green 部署中属于替换环境的实例的信息，包括一个或多个 Amazon EC2 Auto Scaling 组的名称，或者用于识别 Amazon EC2 实例的标签筛选密钥、类型和值。

**注意**  
在 **create-deployment** 调用中使用此语法，可直接在命令行上指定有关 Amazon S3 中修订的信息。（`version` 和 `eTag` 可选。）  

```
--s3-location bucket=string,key=string,bundleType=tar|tgz|zip,version=string,eTag=string
```
使用以下语法作为**create-deployment**调用的一部分， GitHub 直接在命令行中指定有关修订的信息：  

```
--github-location repository=string,commitId=string
```
要获取有关已推送修订的信息，请调用 [list-application-revisions](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-application-revisions.html) 命令。

要跟踪部署的状态，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

## create-deployment 命令参考
<a name="deployments-create-cli-reference"></a>

以下是 `create-deployment` 命令的命令结构和选项。有关更多信息，请参阅《AWS CLI 命令参考》**中的 [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) 参考。

```
create-deployment
--application-name <value>
[--deployment-group-name <value>]
[--revision <value>]
[--deployment-config-name <value>]
[--description <value>]
[--ignore-application-stop-failures | --no-ignore-application-stop-failures]
[--target-instances <value>]
[--auto-rollback-configuration <value>]
[--update-outdated-instances-only | --no-update-outdated-instances-only]
[--file-exists-behavior <value>]
[--s3-location <value>]
[--github-location <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
```

# 将 CodeDeploy 应用程序连接到存储 GitHub 库
<a name="deployments-create-cli-github"></a>

在首次使用 GitHub 存储库部署应用程序之前 AWS CLI，必须先授予代表您的 GitHub 账户与 GitHub 之交互的 CodeDeploy 权限。必须使用 CodeDeploy 控制台为每个应用程序完成一次此步骤。

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 选择**应用程序**。

1. 从**应用程序**中，选择要关联到 GitHub 用户帐户的应用程序，然后选择**部署应用程序**。
**注意**  
您没有创建部署。目前，这是授予代表您的 GitHub用户帐户进行交互 GitHub 的 CodeDeploy 权限的唯一途径。

1. 在 “**存储库类型**” 旁边，选择 “**我的应用程序修订存储在” 中 GitHub**。

1. 选择 “**连接到” GitHub**。
**注意**  
如果你看到 “**Connect to 其他 GitHub账号**” 链接：  
您可能已经授权 CodeDeploy GitHub 代表该应用程序的另一个 GitHub 账户与之交互。  
您可能已经撤销了 GitHub代表登录 GitHub 账户与中关联的所有应用程序进行交互的授权。 CodeDeploy CodeDeploy  
有关更多信息，请参阅 [GitHub 使用中的应用程序进行身份验证 CodeDeploy](integrations-partners-github.md#behaviors-authentication)。

1. 如果您尚未登录 GitHub，请按照 “**登录**” 页面上的说明进行操作。

1. 在 **Authorize application** 页上，选择 **Authorize application**。

1. 现在 CodeDeploy 已获得权限，请选择 “**取消**”，然后继续执行中的步骤[创建 EC2/本地计算平台部署（CLI）](deployments-create-cli.md)。

# 通过创建 Amazon ECS blue/green 部署 CloudFormation
<a name="deployments-create-ecs-cfn"></a>

您可以使用 AWS CloudFormation 通过管理 Amazon ECS blue/green 部署 CodeDeploy。通过定义蓝绿资源并指定要在 CloudFormation中使用的流量路由和稳定设置来生成部署。本主题介绍由管理的 Amazon ECS blue/green 部署 CodeDeploy 和由管理的部署之间的区别 CloudFormation。

*有关使用 CloudFormation 来管理 Amazon ECS 蓝/绿部署的 step-by-step说明，请参阅用户指南 AWS CloudFormation中的[ CodeDeploy 使用自动执行 ECS 蓝/绿部署](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html)。AWS CloudFormation *

**注意**  
亚太地区（大阪）区域 CloudFormation 不支持使用管理 Amazon ECS blue/green 部署。

## 通过 CodeDeploy 和 blue/green 部署的 Amazon ECS 之间的区别 CloudFormation
<a name="differences-ecs-bg-cfn"></a>

 CloudFormation 堆栈模板建模 Amazon ECS 任务相关的资源和基础设施，以及部署的配置选项。因此，标准 Amazon ECS blue/green 部署和通过创建的 blue/green 部署之间存在差异 CloudFormation。

与标准 Amazon ECS blue/green 部署不同，您无需对以下内容进行建模或手动创建：
+ 您不能通过指定唯一代表要部署的内容的名称来创建 AWS CodeDeploy 应用程序。
+ 您不创建 AWS CodeDeploy 部署组。
+ 您无需指定*应用程序规范文件*（AppSpec 文件）。通常使用该 AppSpec 文件管理的信息，例如加权配置选项或生命周期事件，由`AWS::CodeDeploy::BlueGreen`挂钩管理。

 此表汇总了部署类型之间的高级工作流程中的差异。


****  

| 函数 | 标准 blue/green 部署 | 蓝/绿部署 CloudFormation | 
| --- | --- | --- | 
| 指定 Amazon ECS 集群、Amazon ECS 服务、应用程序负载均衡器或网络负载均衡器、生产侦听器、测试侦听器和两个目标组。 | 创建指定这些资源的 CodeDeploy 部署组。 | 创建 CloudFormation 模板来对这些资源进行建模。 | 
| 指定要部署的更改。 | 创建 CodeDeploy 应用程序。 | 创建指定容器镜像的 CloudFormation 模板。 | 
| 指定 Amazon ECS 任务定义、容器名称和容器端口。 | 创建指定这些资源的 AppSpec 文件。 | 创建 CloudFormation 模板来对这些资源进行建模。 | 
| 指定部署流量转移选项和生命周期事件挂钩。 | 创建一个指定这些选项的 AppSpec 文件。 | 创建一个使用AWS::CodeDeploy::BlueGreen挂钩参数来指定这些选项的 CloudFormation 模板。 | 
|  CloudWatch 警报。  |  创建触发回滚的 CloudWatch 警报。  |  在 CloudFormation 堆栈级别配置触发回滚的 CloudWatch 警报。  | 
| 回滚/重新部署。 | 指定回滚和重新部署选项。 | 取消中的堆栈更新 CloudFormation。 | 

## 通过以下方式监控 Amazon ECS blue/green 部署 CloudFormation
<a name="monitoring-ecs-bg-cfn"></a>

您可以通过 CloudFormation 和监控 blue/green 部署 CodeDeploy。有关通过监控的信息 CloudFormation，请参阅《*AWS CloudFormation 用户指南》 CloudFormation*[中的监控 blue/green 事件](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html#blue-green-events)。

**要在中查看部署的 blue/green 部署状态 CodeDeploy**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在 “**部署**” 中，将显示由 CloudFormation 堆栈更新触发的部署。选择部署以查看 **Deployment history（部署历史记录）**。  
![\[显示“Deployments（部署）”部分和部署历史记录的控制台屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/images/cfn-cd-bg-deplhist.png)

1. 选择部署以查看流量转移状态。请注意，不会创建应用程序和部署组。  
![\[显示部署状态为“completed（已完成）”的部署详细信息的控制台屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/images/cfn-cd-bg-deplstatus.png)

1. 以下内容适用于回滚或停止部署：
   + 成功部署显示在中， CodeDeploy 并显示部署是由启动的 CloudFormation。
   + 如果要停止并回滚部署，则必须取消中的堆栈更新 CloudFormation。

# 查看 CodeDeploy 部署详情
<a name="deployments-view-details"></a>

您可以使用 CodeDeploy 控制台 AWS CLI、或 CodeDeploy APIs 来查看与您的 AWS 账户关联的部署的详细信息。

**注意**  
您可以在以下位置中查看您的实例的 EC2/本地部署日志：  
Amazon Linux、RHEL 和 Ubuntu Server：`/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log`
Windows 服务器：C:\$1\$1 AmazonProgramData\$1 CodeDeploy <DEPLOYMENT-GROUP-ID><DEPLOYMENT-ID>\$1 logs\$1 scripts.log
有关更多信息，请参阅 [分析日志文件以调查针对实例的部署失败](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)。

**Topics**
+ [查看部署详细信息（控制台）](#deployments-view-details-console)
+ [查看部署详细信息（CLI）](#deployments-view-details-cli)

## 查看部署详细信息（控制台）
<a name="deployments-view-details-console"></a>

要使用 CodeDeploy 控制台查看部署详细信息，请执行以下操作：

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在导航窗格中，展开**部署**，然后选择**部署**。
**注意**  
如果未显示任何条目，请确保选择了正确的区域。在导航栏的区域选择器中，选择[区域和终端节点中列出的区域](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)之一*AWS 一般参考*。 CodeDeploy 仅在这些地区支持。

1. 要查看有关单个部署的更多详细信息，请在 **Deployment history（部署历史记录）**中，选择部署 ID 或选择部署 ID 旁边的按钮，然后选择 **View（查看）**。

## 查看部署详细信息（CLI）
<a name="deployments-view-details-cli"></a>

要使用查看部署详细信息，请调用`get-deployment`命令或`batch-get-deployments`命令。 AWS CLI 您可以调用`list-deployments`命令来获取唯一部署列表 IDs ，以用作`get-deployment`命令和命令的输入。`batch-get-deployments`

要查看有关单个部署的详细信息，请调用 [get-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment.html) 命令，并指定唯一部署标识符。要获取部署 ID，请调用 [list-deployments](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployments.html) 命令。

要查看有关多个部署的详细信息，请调用 [batch-get-deployments](https://docs.aws.amazon.com/cli/latest/reference/deploy/batch-get-deployments.html) 命令，并指定多个唯一部署标识符。要获取部署 IDs，请调用 [list-deployments 命令](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployments.html)。

要查看部署 IDs列表，请调用 [list-](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployments.html) deployments 命令，指定：
+ 与部署关联的应用程序的名称。要查看应用程序名称的列表，请调用 [list-applications](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-applications.html) 命令。
+ 与部署关联的部署组的名称。要查看部署组名称的列表，请调用 [list-deployment-groups](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-groups.html) 命令。
+ （可选）是否按部署状态包含有关部署的详细信息。（如果未指定，则将列出所有匹配的部署，不管其部署状态如何。）
+ （可选）是否按部署创建的开始时间和/或结束时间包含有关部署的详细信息。（如果未指定，则将列出所有匹配的部署，不管其创建时间如何。）

# 查看 CodeDeploy EC2/本地部署的日志数据
<a name="deployments-view-logs"></a>

您可以通过将 Amazon CloudWatch 代理设置为在 CloudWatch 控制台中查看聚合数据或登录单个实例查看日志文件来查看 CodeDeploy 部署创建的日志数据。

**注意**  
 AWS Lambda 或 Amazon ECS 部署不支持日志。只能为 EC2/本地部署创建日志。

**Topics**
+ [在 Amazon CloudWatch 控制台中查看日志文件数据](#deployments-view-logs-cloudwatch)
+ [查看实例上的日志文件](#deployments-view-logs-instance)

## 在 Amazon CloudWatch 控制台中查看日志文件数据
<a name="deployments-view-logs-cloudwatch"></a>

在实例上安装 Amazon CloudWatch 代理后，该实例的所有部署数据都可以在 CloudWatch 控制台中查看。为简单起见，我们建议 CloudWatch 使用集中监控日志文件，而不是逐个实例查看它们。有关更多信息，请参阅 [将 CodeDeploy 代理日志发送到 CloudWatch](codedeploy-agent-operations-cloudwatch-agent.md)。

## 查看实例上的日志文件
<a name="deployments-view-logs-instance"></a>

要查看单个实例的部署日志数据，您可以登录实例并浏览有关错误或其他部署事件的信息。

**Topics**
+ [查看 Amazon Linux、RHEL 和 Ubuntu Server 实例上的部署日志文件](#deployments-view-logs-instance-unix)
+ [查看 Windows Server 实例上的部署日志文件](#deployments-view-logs-instance-windows)

### 查看 Amazon Linux、RHEL 和 Ubuntu Server 实例上的部署日志文件
<a name="deployments-view-logs-instance-unix"></a>

在 Amazon Linux、RHEL 和 Ubuntu Server 实例上，部署日志存储在以下位置：

 `/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log`

要查看或分析 Amazon Linux、RHEL 和 Ubuntu 服务器实例上的部署日志，请登录该实例，然后键入以下命令以打开 CodeDeploy 代理日志文件：

```
less /var/log/aws/codedeploy-agent/codedeploy-agent.log
```

键入以下命令浏览日志文件以查看错误消息：


| 命令 | 结果 | 
| --- | --- | 
| & ERROR  | 仅显示日志文件中的错误消息。在 ERROR 一词的前后使用一个空格。 | 
| / ERROR  | 搜索下一条错误消息。¹  | 
| ? ERROR  | 搜索之前的错误消息。² 在单词 ERROR 前后使用一个空格。 | 
| G | 转到日志文件的末尾。 | 
| g | 转到日志文件的开头。 | 
| q | 退出日志文件。 | 
| h | 了解其他命令。 | 
|  ¹ 键入 **/ ERROR ** 后，为下一条错误消息键入 **n**。为上一条错误消息键入 **N**。 ² 键入 **n** 后，为下一条错误消息键入 **? ERROR **，或为上一条错误消息键入 **N**。  | 

您也可以键入以下命令来打开 CodeDeploy 脚本日志文件：

```
less /opt/codedeploy-agent/deployment-root/deployment-group-ID/deployment-ID/logs/scripts.log
```

键入以下命令浏览日志文件以查看错误消息：


| 命令 | 结果 | 
| --- | --- | 
| &stderr | 仅显示日志文件中的错误消息。 | 
| /stderr | 搜索下一条错误消息。¹ | 
| ?stderr | 搜索上一条错误消息。² | 
| G | 转到日志文件的末尾。 | 
| g | 转到日志文件的开头。 | 
| q | 退出日志文件。 | 
| h | 了解其他命令。 | 
|  ¹ 键入 **/stderr** 后，为下一条错误消息键入 **n**。为上一条错误消息键入 **N**。 ² 键入 **?stderr** 后，为上一条错误消息键入 **n**。为上一条错误消息键入 **N**。  | 

### 查看 Windows Server 实例上的部署日志文件
<a name="deployments-view-logs-instance-windows"></a>

**CodeDeploy 代理日志文件**：在 Windows Server 实例上， CodeDeploy 代理日志文件存储在以下位置：

`C:\ProgramData\Amazon\CodeDeploy\log\codedeploy-agent-log.txt`

要查看或分析 Windows Server 实例上的 CodeDeploy 代理日志文件，请登录该实例，然后键入以下命令打开该文件：

```
notepad C:\ProgramData\Amazon\CodeDeploy\log\codedeploy-agent-log.txt
```

要浏览日志文件以查看错误消息，请按 CTRL\$1F，键入 **ERROR [**，然后按 Enter 以查找第一个错误。

**CodeDeploy 脚本日志文件**：在 Windows 服务器实例上，部署日志存储在以下位置：

`C:\ProgramData\Amazon\CodeDeploy\deployment-group-id\deployment-id\logs\scripts.log`

其中：
+ *deployment-group-id*是一个字符串，例如 `examplebf3a9c7a-7c19-4657-8684-b0c68d0cd3c4`
+ *deployment-id*是一个标识符，例如 `d-12EXAMPLE`

键入以下命令打开 CodeDeploy 脚本日志文件：

```
notepad C:\ProgramData\Amazon\CodeDeploy\deployment-group-ID\deployment-ID\logs\scripts.log
```

要浏览日志文件以查看错误消息，请按 CTRL\$1F，键入 **stderr**，然后按 Enter 以查找第一个错误。

# 通过 CodeDeploy 停止部署
<a name="deployments-stop"></a>

您可以使用 CodeDeploy 控制台、AWS CLI 或 CodeDeploy API 停止与您的 AWS 账户关联的部署。

**警告**  
停止 EC2/本地部署可能会使您的部署组中的部分或全部实例处于不确定的部署状态。有关更多信息，请参阅 [停止和失败的部署](deployment-steps-server.md#deployment-stop-fail)。

**Topics**
+ [停止部署（控制台）](#deployments-stop-console)
+ [停止部署（CLI）](#deployments-stop-cli)

**注意**  
如果您的部署是通过 CloudFormation 进行蓝绿部署，则无法在 CodeDeploy 控制台中执行此任务。转到 CloudFormation 控制台执行此任务。

## 停止部署（控制台）
<a name="deployments-stop-console"></a>

1. 登录 AWS 管理控制台并打开 CodeDeploy 控制台，网址为 [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy)。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在导航窗格中，展开**部署**，然后选择**部署**。
**注意**  
如果未显示任何条目，请确保选择了正确的区域。在全局导航栏上的区域选择器中，选择 *AWS 一般参考* 的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中列出的某个区域。只有这些区域支持 CodeDeploy。

1. 选择要停止执行以下操作之一的部署：

   1. 选择 **Stop deployment（停止部署）**以停止部署而不进行回滚。

   1. 选择 **Stop and roll back deployment（停止并回滚）**以停止并回滚部署。

   有关更多信息，请参阅 [使用重新部署和回滚部署 CodeDeploy](deployments-rollback-and-redeploy.md)。
**注意**  
如果 **Stop deployment（停止部署）**和 **Stop and roll back deployment（停止并回滚部署）**不可用，则表示部署已进展到无法停止的时间点。

## 停止部署（CLI）
<a name="deployments-stop-cli"></a>

调用 [stop-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/stop-deployment.html) 命令，并指定部署 ID。要查看部署 ID 的列表，请调用 [list-deployments](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployments.html) 命令。

# 使用重新部署和回滚部署 CodeDeploy
<a name="deployments-rollback-and-redeploy"></a>

CodeDeploy 通过将先前部署的应用程序修订版重新部署为新部署来回滚部署。从技术上讲，这些回滚部署是新的部署，具有新的部署 IDs，而不是先前部署的还原版本。

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

**Topics**
+ [自动回滚](#deployments-rollback-and-redeploy-automatic-rollbacks)
+ [手动回滚](#deployments-rollback-and-redeploy-manual-rollbacks)
+ [回滚和重新部署工作流程](#deployments-rollback-and-redeploy-workflow)
+ [现有内容的回滚行为](#deployments-rollback-and-redeploy-content-options)

## 自动回滚
<a name="deployments-rollback-and-redeploy-automatic-rollbacks"></a>

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

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

**注意**  
可使用 Amazon Simple Notification Service 在部署自动回滚时接收通知。有关信息，请参阅[使用 Amazon SNS 事件通知监控部署](monitoring-sns-event-notifications.md)。

有关配置自动回滚的更多信息，请参阅[为部署组配置高级选项](deployment-groups-configure-advanced-options.md)。

## 手动回滚
<a name="deployments-rollback-and-redeploy-manual-rollbacks"></a>

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

**注意**  
如果您从部署组中移除实例，则 CodeDeploy 不会卸载该实例上可能已安装的任何内容。

## 回滚和重新部署工作流程
<a name="deployments-rollback-and-redeploy-workflow"></a>

启动自动回滚时，或者手动启动重新部署或手动回滚时， CodeDeploy 首先尝试从每个参与的实例中删除上次成功安装的所有文件。 CodeDeploy 通过检查清理文件来做到这一点：

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

## 现有内容的回滚行为
<a name="deployments-rollback-and-redeploy-content-options"></a>

作为部署过程的一部分， CodeDeploy 代理会从每个实例中删除最新部署安装的所有文件。如果不属于先前部署的文件出现在目标部署位置，则可以在下次部署期间选择 CodeDeploy 如何处理这些文件：
+ **使部署失败** - 系统报告出错，并且部署状态更改为“失败”。
+ **覆盖内容** - 来自应用程序修订的文件版本将替换实例上已有的版本。
+ **保留内容** - 目标位置的文件将保留，并且应用程序修订中的版本不会复制到实例。

您可以在创建部署时选择此行为。如果在控制台中创建部署，请参阅[创建 EC2/本地计算平台部署（控制台）](deployments-create-console.md)。如果使用创建部署 AWS CLI，请参阅[创建 EC2/本地计算平台部署（CLI）](deployments-create-cli.md)。

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

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

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

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


****  

|  部署  |  应用程序修订  |  内容覆盖选项  |  部署状态  |  行为和结果  | 
| --- | --- | --- | --- | --- | 
|  部署 1  |  应用程序修订 1  |  保留  |  成功  |  CodeDeploy 检测目标位置中未在先前部署中部署的文件。这些文件可能特意放置在该位置以成为当前部署的一部分。它们将保留并记录为当前部署包的一部分。  | 
|  部署 2  |  应用程序修订 2  |  覆盖  |  失败  |  在部署过程中， CodeDeploy 删除先前成功部署的所有文件。这包括在部署 1 期间保留的文件。 但是，部署是因不相关的原因导致失败的。  | 
|  部署 3  |  应用程序修订 1  |  保留  |    | 由于已为部署或部署组启用自动回滚，因此， CodeDeploy 将部署上一个已知正常的应用程序修订 (应用程序修订 1)。但是，您要在部署 1 中保留的文件在部署 2 失败之前已被删除，因此无法被检索 AWS CodeDeploy。您可以自行将这些文件添加到实例（如果应用程序修订 1 需要这些文件），也可以创建新的应用程序修订。 | 

# 在其他 AWS 账户中部署应用程序
<a name="deployments-cross-account"></a>

Organizations 通常有多个用于不同目的的 AWS 帐户（例如，一个用于系统管理任务，另一个用于开发、测试和生产任务，或者一个与开发和测试环境相关联，另一个与生产环境关联）。

尽管您可能在不同的账户中执行相关工作，但 CodeDeploy 部署组及其部署到的 Amazon EC2 实例与其创建时使用的账户严格关联。例如，您无法将在一个账户中启动的实例添加到另一个账户中的部署组。

假设你有两个 AWS 账户：你的开发账户和你的生产账户。您主要使用开发账户进行工作，但是希望能够在生产账户中启动部署而无需完整的一组凭证，或者不希望注销开发账户并登录生产账户来进行工作。

完成以下跨账户配置步骤之后，您可以启动属于您组织的另一个账户下的部署，而无需另一个账户的一组完整权限。在此操作过程中，您需要使用 AWS Security Token Service （AWS STS）提供的功能，该功能可授予您对该账户的临时访问权限。

## 步骤 1：在任一账户中创建 S3 存储桶
<a name="deployments-cross-account-1-create-s3-bucket"></a>

在开发账户或生产账户中：
+ 如果您还未创建，则创建将在其中存储生产账户的应用程序修订的 Amazon S3 存储桶。有关信息，请参阅[在 Amazon S3 中创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)。您甚至可以为两个账户使用相同的存储桶和应用程序修订，将您在开发账户中测试和验证的相同文件部署到您的生产环境。

## 步骤 2：将 Amazon S3 存储桶权限授予生产账户的 IAM 实例配置文件
<a name="deployments-cross-account-2-grant-bucket-permissions"></a>

如果您在步骤 1 中创建的 Amazon S3 存储桶位于您的生产账户中，则不需要此步骤。稍后您将承担的角色具有对此存储桶的访问权限，因为该存储桶也位于生产账户中。

如果您在开发账户中创建了 Amazon S3 存储桶，则执行以下操作：
+ 在生产账户中，创建 IAM 实例配置文件。有关信息，请参阅[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)。
**注意**  
记录此 IAM 实例配置文件的 ARN。您需要将它添加到接下来创建的跨存储桶策略中。
+ 在开发账户中，将您在开发账户中创建的 Amazon S3 存储桶的访问权限授予刚刚在生产账户中创建的 IAM 实例配置文件。有关信息，请参阅[示例 2：存储桶拥有者授予跨账户存储桶权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)。

  完成授予跨账户存储桶权限的过程时，请注意以下内容：
  + 在示例演练中，账户 A 表示您的开发账户，账户 B 表示您的生产账户。
  + 当您[执行账户 A（开发账户）任务](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html#access-policies-walkthrough-cross-account-permissions-acctA-tasks)时，修改以下存储桶策略以授予跨账户权限，而不是使用演练中提供的示例策略。

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "Cross-account permissions",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::111122223333:role/role-name"
                },
                "Action": [
                    "s3:Get*",
                    "s3:List*"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket-name/*"
                ]
            }
        ]
    }
    ```

------

    *account-id*表示您刚刚在其中创建 IAM 实例配置文件的生产账户的账号。

    *role-name*代表您刚刚创建的 IAM 实例配置文件的名称。

    *bucket-name*表示您在步骤 1 中创建的存储桶的名称。请确保在存储桶名称之后包括 `/*`，以提供对存储桶中各个文件的访问权限。

## 步骤 3：在生产账户中创建资源和跨账户角色
<a name="deployments-cross-account-3-create-resources-and-role"></a>

在生产账户中：
+ 按照本指南中的说明创建您的 CodeDeploy 资源（应用程序、部署组、部署配置、Amazon EC2 实例、Amazon EC2 实例配置文件、服务角色等）。
+ 创建一个额外的角色，即跨账户 IAM 角色，您的开发账户中的用户可以代入该角色来执行此生产账户中的 CodeDeploy 操作。

  使用[演练：使用 IAM 角色委派跨 AWS 账户访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/walkthru_cross-account-with-roles.html)作为指南，帮助您创建跨账户角色。与其将演练中的示例权限添加到策略文档中，不如将 AWS 提供的以下两个策略附加到该角色：
  + `AmazonS3FullAccess`：只有当 S3 存储桶位于开发账户中时才需要。提供对开发账户（修订存储在其中）中的 Amazon S3 服务和资源具有完整访问权限的已代入生产账户角色。
  + `AWSCodeDeployDeployerAccess`：允许用户注册和部署修订。

  如果要创建和管理部署组而不是启动部署，请添加 `AWSCodeDeployFullAccess` 策略而不是 `AWSCodeDeployDeployerAccess` 策略。有关使用 IAM 托管策略授予 CodeDeploy 任务权限的更多信息，请参阅[AWS 的托管（预定义）策略 CodeDeploy](managed-policies.md)。

  如果您希望在使用此跨账户角色时在其他 AWS 服务中执行任务，可以附加其他策略。

**重要**  
在您创建跨账户 IAM 角色时，请记录详细信息，您需要这些详细信息来获取对生产账户的访问权限。  
要使用切换角色，您需要提供以下任一信息： AWS 管理控制台   
用于通过所代入角色的凭证来访问生产账户的 URL。您可以在 **Review** 页面上找到该 URL，该页面在跨账户角色创建过程结束时显示。
跨账户角色的名称以及账户 ID 编号或别名。
要使用切换角色，您需要提供以下信息： AWS CLI   
您将代入的跨账户角色的 ARN。

## 步骤 4：将应用程序修订上传到 Amazon S3 存储桶
<a name="deployments-cross-account-4-upload-application-revision"></a>

在您创建了 Amazon S3 存储桶的账户中：
+ 将您的应用程序修订上传到 Amazon S3 存储桶。有关信息，请参阅[将修订推送 CodeDeploy 到 Amazon S3（仅限 EC2/本地部署）](application-revisions-push.md)。

## 步骤 5：代入跨账户角色和部署应用程序
<a name="deployments-cross-account-5-assume-role-and-deploy"></a>

在开发账户中，您可以使用 AWS CLI 或代 AWS 管理控制台 入跨账户角色并在生产账户中启动部署。

有关如何使用切换角色和启动部署的说明，请参阅[切换到角色 (AWS 管理控制台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) 和[创建 EC2/本地计算平台部署（控制台）](deployments-create-console.md)。 AWS 管理控制台 

有关如何使用担任跨账户角色和启动部署的说明，请参阅[切换到 IAM 角色 (AWS Command Line Interface)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html) 和[创建 EC2/本地计算平台部署（CLI）](deployments-create-cli.md)。 AWS CLI 

[有关通过担任角色的更多信息 AWS STS，请参阅[《AWS Security Token Service 用户指南》和《](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html)命令参[考》[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)中的 assume-](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html) role。AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/)

**相关主题：**
+ [CodeDeploy: 从开发账户部署到生产账户](https://aws.amazon.com/blogs/devops/aws-codedeploy-deploying-from-a-development-account-to-a-production-account/)

# 使用 CodeDeploy 代理在本地计算机上验证部署包
<a name="deployments-local"></a>

使用该 CodeDeploy 代理，您可以在已登录的实例上部署内容。这使您可以测试要在部署中使用的应用程序规范AppSpec 文件（文件）和要部署的内容的完整性。

您不需要创建应用程序和部署组。如果要部署存储在本地实例上的内容，则甚至不需要 AWS 帐户。对于最简单的测试，您可以在包含要部署 AppSpec 的文件和内容的目录中运行该**codedeploy-local**命令，而无需指定任何选项。工具中还有适用于其他测试用例的选项。

通过验证本地机器上的部署程序包，您可以：
+ 测试应用程序修订的完整性。
+ 测试 AppSpec 文件的内容。
+  CodeDeploy 首次尝试使用您现有的应用程序代码。
+ 登录实例后快速部署内容。

您可以使用存储在本地实例或支持的远程存储库类型（Amazon S3 存储桶或公共存储 GitHub 库）中的部署内容。

## 先决条件
<a name="deployments-local-prerequisites"></a>

在开始本地部署之前，请先完成以下步骤：
+ 创建或使用 CodeDeploy 代理支持的实例类型。有关信息，请参阅[CodeDeploy 代理支持的操作系统](codedeploy-agent.md#codedeploy-agent-supported-operating-systems)。
+ 安装代理版本 1.0.1.1352 或更高版本。 CodeDeploy 有关信息，请参阅[安装代 CodeDeploy 理](codedeploy-agent-operations-install.md)。
+ 如果您要从 Amazon S3 存储桶或存储 GitHub 库部署内容，请配置用户以与一起使用 CodeDeploy。有关信息，请参阅[步骤 1：设置](getting-started-setting-up.md)。
+ 如果您要从 Amazon S3 存储桶部署应用程序修订，请在您工作的区域创建一个 Amazon S3 存储桶，并为该存储桶应用 Amazon S3 存储桶策略。此策略为您的实例授予下载应用程序修订所需的权限。

  例如，以下 Amazon S3 存储桶策略允许从名为 `amzn-s3-demo-bucket` 的 Amazon S3 存储桶中的任何位置，下载附加了 IAM 实例配置文件（其中包含 ARN `arn:aws:iam::444455556666:role/CodeDeployDemo`）的任意 Amazon EC2 实例：

  ```
  {
      "Statement": [
          {
              "Action": [
                  "s3:Get*",
                  "s3:List*"
              ],
              "Effect": "Allow",
              "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
              "Principal": {
                  "AWS": [
                      "arn:aws:iam::444455556666:role/CodeDeployDemo"
                  ]
              }
          }
      ]
  }
  ```

  以下 Amazon S3 存储桶策略允许从名为 `amzn-s3-demo-bucket` 的 Amazon S3 存储桶中的任意位置，下载具有关联 IAM 用户（其中包含 ARN `arn:aws:iam::444455556666:user/CodeDeployUser`）的任意本地实例：

  ```
  {
      "Statement": [
          {
              "Action": [
                  "s3:Get*",
                  "s3:List*"
              ],
              "Effect": "Allow",
              "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
              "Principal": {
                  "AWS": [
                      "arn:aws:iam::444455556666:user/CodeDeployUser"
                  ]
              }
          }
      ]
  }
  ```

  有关如何生成和附加 Amazon S3 存储桶策略的信息，请参阅[存储桶策略示例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)。
+ 如果您要从 Amazon S3 存储桶或存储 GitHub库部署应用程序修订，请设置 IAM 实例配置文件并将其附加到实例。有关信息，请参阅[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)、[为 CodeDeploy （AWS CLI 或亚马逊 EC2 控制台）创建 Amazon EC2 实例](instances-ec2-create.md)和[为 CodeDeploy （CloudFormation 模板）创建 Amazon EC2 实例](instances-ec2-create-cloudformation-template.md)。
+ 如果您要从中部署内容 GitHub，请创建一个 GitHub 账户和一个公共存储库。要创建 GitHub 账户，请参阅[加入 GitHub](https://github.com/join)。要创建 GitHub存储库，请参阅[创建存储库](https://help.github.com/articles/create-a-repo/)。
**注意**  
 目前不支持私有存储库。如果您的内容存储在私有存储 GitHub 库中，则可以将其下载到实例，然后使用`--bundle-location`选项指定其本地路径。
+ 准备好要部署到实例的内容（包括 AppSpec 文件），并将其放在本地实例、Amazon S3 存储桶或存储 GitHub 库中。有关信息，请参阅[正在处理的应用程序修订版 CodeDeploy](application-revisions.md)。
+ 对于其他配置选项，如果您希望使用默认值以外的其他值，请创建配置文件并将其放在实例中（对于 Amazon Linux、RHEL 或 Ubuntu Server 实例，该文件为 `/etc/codedeploy-agent/conf/codedeployagent.yml`；对于 Windows Server 实例，该文件为 `C:\ProgramData\Amazon\CodeDeploy\conf.yml`）。有关信息，请参阅[CodeDeploy 代理配置参考](reference-agent-configuration.md)。
**注意**  
如果您在 Amazon Linux、RHEL 或 Ubuntu Server 实例上使用了配置文件，则必须执行以下操作之一：  
对于部署根目录文件夹和日志目录文件夹，使用 `:root_dir:` 和 `:log_dir:` 变量指定默认位置以外的其他位置。
`sudo`用于运行 CodeDeploy 代理命令。

## 创建本地部署
<a name="deployments-local-deploy"></a>

在要创建本地部署的实例上，打开终端会话（Amazon Linux、RHEL 或 Ubuntu Server 实例）或命令提示符（Windows Server）来运行工具命令。

**注意**  
 **codedeploy-local** 命令安装在以下位置：  
 在 Amazon Linux、RHEL 或 Ubuntu Server 上：`/opt/codedeploy-agent/bin`。
 在 Windows Server 上：`C:\ProgramData\Amazon\CodeDeploy\bin`。

**基本命令语法**

```
codedeploy-local [options]
```

**摘要**

```
codedeploy-local
[--bundle-location <value>]
[--type <value>]
[--file-exists-behavior <value>]
[--deployment-group <value>]
[--events <comma-separated values>]
[--agent-configuration-file <value>]
[--appspec-filename <value>]
```

**选项**

**-l **, ** -bundle-location **

应用程序修订数据包的位置。如果您没有指定位置，该工具将默认使用您当前的工作目录。如果为 `--bundle-location` 指定值，则必须为 `--type` 指定值。

数据包位置格式示例：
+ 本地 Amazon Linux、RHEL 或 Ubuntu Server 实例：`/path/to/local/bundle.tgz`
+ 本地 Windows Server 实例：`C:/path/to/local/bundle`
+ Amazon S3 存储桶：`s3://amzn-s3-demo-bucket/bundle.tar`
+ GitHub 存储库：`https://github.com/account-name/repository-name/`

**-t**, **--type**

应用程序修订数据包的格式。支持的类型包括 `tgz`、`tar`、`zip` 和 `directory`。如果您没有指定类型，该工具将默认使用 `directory`。如果为 `--type` 指定值，则必须为 `--bundle-location` 指定值。

**-b**，**--file-exists-behavior**

指明如何处理已存在于部署目标位置的文件（但并不是之前的成功部署放置的文件）。选项包括 DISALLOW、OVERWRITE、RETAIN。有关更多信息，请参阅 *[AWS CodeDeploy API 参考[fileExistsBehavior](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html#CodeDeploy-CreateDeployment-request-fileExistsBehavior)](https://docs.aws.amazon.com/codedeploy/latest/APIReference/)*中的。

**-g**, **--deployment-group**

要部署内容的目标位置的文件夹路径。如果您未指定文件夹，则该工具会在您的部署根目录中创建一个名为*default-local-deployment-group*的文件夹。对于您创建的每个本地部署，该工具都会在此文件夹中创建一个子目录，名称示例为 *d-98761234-local*。

**-e**, **--events**

要按顺序运行的一组覆盖生命周期事件挂钩，而不是 AppSpec 文件中列出的事件。可指定多个挂钩，以逗号分隔。在以下情况下您可以使用此选项：
+ 你想在不更新 AppSpec 文件的情况下运行一组不同的事件。
+ 你想运行一个事件挂钩作为 AppSpec 文件中内容的异常，例如`ApplicationStop`。

如果您未在覆盖列表中指定**DownloadBundle**并**安装**事件，则它们将在您指定的所有事件挂钩之前运行。如果在`--events`选项列表中包含**DownloadBundle**并**安装**，则在它们之前必须仅有 CodeDeploy 部署中通常在它们之前运行的事件。有关信息，请参阅[AppSpec “挂钩” 部分](reference-appspec-file-structure-hooks.md)。

**-c**，**--agent-configuration-file**

要用于部署的配置文件的位置（存储位置与默认位置不同时）。配置文件指定部署中默认值和默认行为的替代值和行为。

默认情况下，配置文件存储在 `/etc/codedeploy-agent/conf/codedeployagent.yml`（Amazon Linux、RHEL 或 Ubuntu Server 实例）或 `C:/ProgramData/Amazon/CodeDeploy/conf.yml`（Windows Server）中。有关更多信息，请参阅 [CodeDeploy 代理配置参考](reference-agent-configuration.md)。

**-A**, **--appspec-filename**

 AppSpec 文件名。对于本地部署，可接受的值为 `appspec.yml` 和 `appspec.yaml`。默认情况下，该 AppSpec 文件被调用`appspec.yml`。

**-h**、**--help**

显示帮助内容的摘要。

**-v**, **--version**

显示工具的版本号。

## 示例
<a name="deployments-local-examples"></a>

以下是有效命令格式的示例。

```
codedeploy-local
```

```
codedeploy-local --bundle-location /path/to/local/bundle/directory
```

```
codedeploy-local --bundle-location C:/path/to/local/bundle.zip --type zip --deployment-group my-deployment-group
```

```
codedeploy-local --bundle-location /path/to/local/directory --type directory --deployment-group my-deployment-group
```

从 Amazon S3 部署捆绑包：

```
codedeploy-local --bundle-location s3://amzn-s3-demo-bucket/bundle.tgz --type tgz
```

```
codedeploy-local --bundle-location s3://amzn-s3-demo-bucket/bundle.zip?versionId=1234&etag=47e8 --type zip --deployment-group my-deployment-group
```

从公共 GitHub 存储库部署捆绑包：

```
codedeploy-local --bundle-location https://github.com/awslabs/aws-codedeploy-sample-tomcat --type zip
```

```
codedeploy-local --bundle-location https://api.github.com/repos/awslabs/aws-codedeploy-sample-tomcat/zipball/master --type zip
```

```
codedeploy-local --bundle-location https://api.github.com/repos/awslabs/aws-codedeploy-sample-tomcat/zipball/HEAD --type zip
```

```
codedeploy-local --bundle-location https://api.github.com/repos/awslabs/aws-codedeploy-sample-tomcat/zipball/1a2b3c4d --type zip
```

部署指定多个生命周期事件的数据包：

```
codedeploy-local --bundle-location /path/to/local/bundle.tar --type tar --application-folder my-deployment --events DownloadBundle,Install,ApplicationStart,HealthCheck
```

使用 ApplicationStop 生命周期事件停止先前部署的应用程序：

```
codedeploy-local --bundle-location /path/to/local/bundle.tgz --type tgz --deployment-group --events ApplicationStop
```

使用特定的部署组 ID 进行部署：

```
codedeploy-local --bundle-location C:/path/to/local/bundle/directory --deployment-group 1234abcd-5dd1-4774-89c6-30b107ac5dca
```

```
codedeploy-local --bundle-location C:/path/to/local/bundle.zip --type zip --deployment-group 1234abcd-5dd1-4774-89c6-30b107ac5dca
```