

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

# 使用 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
```