使用 CodeDeploy 代理验证本地机器上的部署程序包
您可以使用 CodeDeploy 代理在已登录的实例上部署内容。这样您就可以测试将要在部署中使用的应用程序规范文件(AppSpec 文件)的完整性,以及要部署的内容的完整性。
您不需要创建应用程序和部署组。如果您要部署的内容存储在本地实例中,您甚至不需要 Amazon 账户。对于最简单的测试,您可以在包含 AppSpec 文件和要部署内容的目录中运行 codedeploy-local 命令,而无需指定任何选项。工具中还有适用于其他测试用例的选项。
通过验证本地机器上的部署程序包,您可以:
-
测试应用程序修订的完整性。
-
测试 AppSpec 文件的内容。
-
利用您现有的应用程序代码首次试用 CodeDeploy。
-
登录实例后快速部署内容。
您要部署的内容可以存储在本地实例中,或存储在受支持的远程存储库类型(Amazon S3 存储桶或公有 GitHub 存储库)中。
先决条件
在开始本地部署之前,请先完成以下步骤:
-
创建或使用 CodeDeploy 代理支持的实例类型。有关信息,请参阅CodeDeploy 代理支持的操作系统。
-
安装 CodeDeploy 代理的 1.0.1.1352 版本或更高版本。有关信息,请参阅安装 CodeDeploy 代理。
-
如果您要部署 Amazon S3 存储桶或 GitHub 存储库中的内容,请预置一个在 CodeDeploy 中使用的用户。有关信息,请参阅步骤 1:设置。
-
如果您要从 Amazon S3 存储桶部署应用程序修订,请在您工作的区域创建一个 Amazon S3 存储桶,并为该存储桶应用 Amazon S3 存储桶策略。此策略为您的实例授予下载应用程序修订所需的权限。
例如,以下 Amazon S3 存储桶策略允许从名为
amzn-s3-demo-bucket的 Amazon S3 存储桶中的任何位置,下载附加了 IAM 实例配置文件(其中包含 ARNarn: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 用户(其中包含 ARNarn: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 存储桶策略的信息,请参阅存储桶策略示例。
-
如果您要从 Amazon S3 存储桶或 GitHub 存储库部署您的应用程序修订,请设置 IAM 实例配置文件并附加到实例。有关信息,请参阅步骤 4:为 Amazon EC2 实例创建 IAM 实例配置文件、为 CodeDeploy 创建 Amazon EC2 实例(Amazon CLI 或 Amazon EC2 控制台)和为 CodeDeploy 创建 Amazon EC2 实例(Amazon CloudFormation 模板)。
-
如果您要从 GitHub 部署您的内容,请创建 GitHub 账户和公有存储库。要创建 GitHub 账户,请参阅联接 GitHub
。要创建 GitHub 存储库,请参阅创建存储库 。 注意
目前不支持私有存储库。如果您的内容存储在私有 GitHub 存储库中,您可以将它下载到实例,并使用
--bundle-location选项指定它的本地路径。 -
准备要部署到实例的内容(包括一个 AppSpec 文件),并将其放置在本地实例、Amazon S3 存储桶或 GitHub 存储库中。有关信息,请参阅使用 CodeDeploy 的应用程序修订。
-
对于其他配置选项,如果您希望使用默认值以外的其他值,请创建配置文件并将其放在实例中(对于 Amazon Linux、RHEL 或 Ubuntu Server 实例,该文件为
/etc/codedeploy-agent/conf/codedeployagent.yml;对于 Windows Server 实例,该文件为C:\ProgramData\Amazon\CodeDeploy\conf.yml)。有关信息,请参阅CodeDeploy 代理配置参考。注意
如果您在 Amazon Linux、RHEL 或 Ubuntu Server 实例上使用了配置文件,则必须执行以下操作之一:
-
对于部署根目录文件夹和日志目录文件夹,使用
:root_dir:和:log_dir:变量指定默认位置以外的其他位置。 -
使用
sudo运行 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>] [--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。有关更多信息,请参阅 Amazon CodeDeploy API 参考中的 fileExistsBehavior。
-g, --deployment-group
要部署内容的目标位置的文件夹路径。如果您不指定文件夹,该工具将在部署根目录中创建一个名为 default-local-deployment-group 的文件夹。对于您创建的每个本地部署,该工具都会在此文件夹中创建一个子目录,名称示例为 d-98761234-local。
-e, --events
您要运行的一组覆盖生命周期事件挂钩(按顺序),而不是您在 AppSpec 文件中列出的事件。可指定多个挂钩,以逗号分隔。在以下情况下您可以使用此选项:
-
您希望在不必更新 AppSpec 文件的情况下运行另一组事件。
-
您希望将单一事件挂钩作为 AppSpec 文件中的例外来运行,例如
ApplicationStop。
如果您没有在覆盖列表中指定 DownloadBundle 和 Install 事件,它们会在您指定的所有事件挂钩之前运行。如果您在 --events 选项列表中包含DownloadBundle 和 Install ,只有 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)中。有关更多信息,请参阅 CodeDeploy 代理配置参考。
-A, --appspec-filename
AppSpec 文件的名称。对于本地部署,可接受的值为 appspec.yml 和 appspec.yaml。默认情况下,AppSpec 文件称为 appspec.yml。
-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://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