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

使用 AWS CodeDeploy 代理验证本地机器上的部署程序包

您可以使用 AWS CodeDeploy 代理在已登录的实例上部署内容。这样您就可以测试将要在部署中使用的应用程序规范文件 (AppSpec file) 的完整性,以及要部署的内容的完整性。

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

通过验证本地机器上的部署程序包,您可以:

  • 测试应用程序修订的完整性。

  • 测试 AppSpec file 的内容。

  • 利用您现有的应用程序代码首次试用 AWS CodeDeploy。

  • 登录实例后快速部署内容。

您要部署的内容可以存储在本地实例中,或存储在受支持的远程存储库类型 (Amazon S3 存储桶或公有 GitHub 存储库) 中。

先决条件

在开始本地部署之前,请先完成以下步骤:

  • 创建或使用 AWS CodeDeploy 代理支持的实例类型。有关信息,请参阅 AWS CodeDeploy 代理支持的操作系统

  • 安装 AWS CodeDeploy 代理的 1.0.1.1352 版本或更高版本。有关信息,请参阅 安装或重新安装 AWS CodeDeploy 代理

  • 如果您要部署 Amazon S3 存储桶或 GitHub 存储库中的内容,请预配置一个在 AWS CodeDeploy 中使用的 IAM 用户。有关信息,请参阅 步骤 1:预置 IAM 用户

  • 如果您要从 Amazon S3 存储桶部署应用程序修订,请在您工作的区域创建一个 Amazon S3 存储桶,并为该存储桶应用 Amazon S3 存储桶策略。此策略为您的实例授予下载应用程序修订所需的权限。

    例如,以下 Amazon S3 存储桶策略允许从名为 codedeploydemobucket 的 Amazon S3 存储桶中的任意位置,下载附加了 IAM 实例配置文件 (其中包含 ARN arn:aws-cn:iam::80398EXAMPLE:role/CodeDeployDemo) 的任意 Amazon EC2 实例:

    { "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "arn:aws-cn:s3:::codedeploydemobucket/*", "Principal": { "AWS": [ "arn:aws-cn:iam::80398EXAMPLE:role/CodeDeployDemo" ] } } ] }

    以下 Amazon S3 存储桶策略允许从名为 codedeploydemobucket 的 Amazon S3 存储桶中的任意位置,下载具有关联 IAM 用户(其中包含 ARN arn:aws-cn:iam::80398EXAMPLE:user/CodeDeployUser)的任意本地实例:

    { "Statement": [ { "Action": [ "s3:Get*", "s3:List*" ], "Effect": "Allow", "Resource": "arn:aws-cn:s3:::codedeploydemobucket/*", "Principal": { "AWS": [ "arn:aws-cn:iam::80398EXAMPLE:user/CodeDeployUser" ] } } ] }

    有关如何生成和附加 Amazon S3 存储桶策略的信息,请参阅存储桶策略示例

  • 如果您要从 Amazon S3 存储桶或 GitHub 存储库部署您的应用程序修订,请设置 IAM 实例配置文件并附加到实例。有关信息,请参阅步骤 4:为 Amazon EC2 实例创建 IAM 实例配置文件为 AWS CodeDeploy 创建 Amazon EC2 实例 (AWS CLI 或 Amazon EC2 控制台)为 AWS CodeDeploy 创建 Amazon EC2 实例 (AWS CloudFormation 模板)

  • 如果您要从 GitHub 部署您的内容,请创建 GitHub 账户和公有存储库。要创建 GitHub 账户,请参阅联接 GitHub。要创建 GitHub 存储库,请参阅创建存储库

    注意

    目前不支持私有存储库。如果您的内容存储在私有 GitHub 存储库中,您可以将它下载到实例,并使用 --bundle-location 选项指定它的本地路径。

  • 准备要部署到实例的内容 (包括一个 AppSpec 文件),并将其放置在本地实例、Amazon S3 存储桶或 GitHub 存储库中。有关信息,请参阅 使用 AWS CodeDeploy 的应用程序修订

  • 对于其他配置选项,如果您希望使用默认值以外的其他值,请创建配置文件并放置在实例中 (对于 Amazon Linux、RHEL 或 Ubuntu Server 实例,该文件为 /etc/codedeploy-agent/conf/codedeployagent.yml;对于 Windows Server 实例,该文件为 C:\ProgramData\Amazon\CodeDeploy\conf.yml)。有关信息,请参阅 AWS CodeDeploy 代理配置参考

    注意

    如果您在 Amazon Linux、RHEL 或 Ubuntu Server 实例上使用配置文件,必须执行以下操作之一:

    • 对于部署根目录文件夹和日志目录文件夹,使用 :root_dir::log_dir: 变量指定默认位置以外的其他位置。

    • 使用 sudo 运行 AWS CodeDeploy 代理命令。

创建本地部署

在您要创建本地部署的实例上,打开终端会话 (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>]

选项

-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://mybucket/bundle.tar

  • GitHub 存储库:https://github.com/account-name/repository-name/

-t, --type

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

-b, --file-exists-behavior

指明如何处理已存在于部署目标位置的文件 (但并不是之前的成功部署放置的文件)。选项包括 DISALLOW、OVERWRITE、RETAIN。有关更多信息,请参阅 AWS CodeDeploy API Reference 中的 fileExistsBehavior

-g, --deployment-group

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

-e, --events

您要运行的一组覆盖生命周期事件挂钩 (按顺序),而不是您在 AppSpec file 中列出的事件。可指定多个挂钩,以逗号分隔。在以下情况下您可以使用此选项:

  • 您希望在不必更新 AppSpec file 的情况下运行另一组事件。

  • 您希望将单一事件挂钩作为 AppSpec file 中的例外来运行,例如 ApplicationStop

如果您没有在覆盖列表中指定 DownloadBundleInstall 事件,它们会在您指定的所有事件挂钩之前运行。如果您在 --events 选项列表中包含 DownloadBundleInstall,只有 AWS CodeDeploy 部署中正常情况下会在它们之前运行的事件才能位于它们之前。有关信息,请参阅 AppSpec 的“hooks”部分

-c, --agent-configuration-file

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

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

-h--help

显示帮助内容的摘要。

-v, --version

显示工具的版本号。

示例

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

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://mybucket/bundle.tgz --type tgz
codedeploy-local --bundle-location s3://mybucket/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