本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Elastic Beanstalk的示例 CodeBuild
此示例Amazon CodeBuild与 Maven 一起生成一个名ROOT.war
为生成输出的 WAR 文件。然后该示例会将 WAR 文件部署到 Amazon Elastic Beanstalk 环境中的实例中。
运行该示例可能会导致您的 Amazon 账户产生相关费用。其中包括与 Amazon S3 CodeBuild 、 CloudWatch Logs 和 Amazon EC2 相关的Amazon资源和操作可能产生的费用。Amazon KMS有关更多信息,请参阅CodeBuild 定价
创建源代码
在本节中,您将使用 Maven 生成源代码。稍后,您可以 CodeBuild 使用此源代码构建 WAR 文件。
-
下载并安装 Maven。有关信息,请参阅 Apache Maven 网站上的下载 Apache Maven
和安装 Apache Maven 。 -
切换到您的本地计算机或实例上的空目录,然后运行此 Maven 命令。
mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=ROOT" "-DarchetypeArtifactId=maven-archetype-webapp" "-DinteractiveMode=false"
如果成功,将创建此目录结构和文件。
. └── ROOT ├── pom.xml └── src └── main ├── resources └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
-
在
ROOT
目录中创建名为.ebextensions
的子目录。在.ebextensions
子目录中,使用此内容创建一个名为fix-path.config
的文件。container_commands: fix_path: command: "unzip ROOT.war 2>&1 > /var/log/my_last_deploy.log"
在您运行 Maven 后,请继续执行以下方案之一:
场景 A: CodeBuild 手动运行并手动部署到 Elastic Beanstalk
在此方案中,您将创建并上传源代码。然后,您可以使用Amazon CodeBuild和Amazon Elastic Beanstalk控制台构建源代码,创建 Elastic Beanstalk 应用程序和环境,并将编译输出部署到环境中。
步骤 a1:将文件添加到源代码
在此步骤中,您将 Elastic Beanstalk 配置文件和构建规范文件添加到中的代码中创建源代码。然后,您将源代码上传到 S3 输入存储桶或 CodeCommit GitHub、或 Bitbucket 存储库。
-
使用以下内容创建名为
buildspec.yml
的文件。将此文件存储到ROOT
目录。version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/*
-
您的文件结构现在应如下所示。
. └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
-
将
ROOT
目录的内容上传到 S3 输入存储桶或 CodeCommit GitHub、或 Bitbucket 存储库。重要 不要上传
ROOT
,只上传其中的目录和文件ROOT
。如果您使用的是 S3 输入存储桶,则它必须受版本控制。请确保创建一个包含目录结构和文件的 ZIP 文件,然后将其上传至输入存储桶。请不要将
ROOT
添加到 ZIP 文件中,而只添加ROOT
中的目录和文件。有关更多信息,请参阅 Amazon S3 开发人员指南中的如何对存储桶配置版本控制。
步骤 a2:创建构建项目并运行构建
在此步骤中,您将使用 Amazon CodeBuild 控制台创建构建项目,然后运行构建。
-
创建或选择 S3 输出存储桶以存储构建输出。如果您将源代码存储在 S3 输入存储桶中,则输出存储桶必须与输入存储桶位于同一个 Amazon 区域中。
-
通过 https://console.aws.amazon.com/codesuite/codebuild/home
打开Amazon CodeBuild主机。 使用Amazon区域选择器选择支持 CodeBuild 的Amazon区域。这必须是用于存储 S3 输出存储桶的同一区域。
-
创建构建项目,然后运行构建。有关更多信息,请参阅 创建构建项目 (控制台) 和 运行构建(控制台)。除这些设置以外,将所有设置保留为默认值。
-
对于 Environment (环境):
-
对于 Environment image (环境映像),选择 Managed image (托管映像)。
-
对于 Operating system (操作系统),选择 Amazon Linux 2。
-
对于 Runtime(s) (运行时),选择 Standard (标准)。
-
对于图片,选择 aws/codebuild/amazonlinux2-x86_64-standard: 3.0。
-
-
对于 Artifacts (构件):
-
对于 Type (类型),选择 Amazon S3。
-
对于 Bucket name (存储桶名称),输入 S3 存储桶的名称。
-
对于 Name (名称),键入您容易记住的生成输出文件名称。包括
.zip
扩展名。 -
对于 Artifacts packaging,选择 Zip。
-
-
步骤 a3:创建应用程序和环境并部署
在此步骤中,您将使用 Amazon Elastic Beanstalk 控制台创建应用程序和环境。作为创建环境的一部分,您要将之前步骤的生成输出部署到环境中。
-
通过 https://console.aws.amazon.com/elasticbeanstalk
打开Amazon Elastic Beanstalk主机。 使用Amazon区域选择器选择存储 S3 输出存储桶的Amazon区域。
-
创建 Elastic Beanstalk 应用程序。有关更多信息,请参阅《Amazon Elastic Beanstalk开发者指南》中的管理和配置Amazon Elastic Beanstalk应用程序。
-
为该应用程序创建 Elastic Beanstalk 环境。有关更多信息,请参阅《Amazon Elastic Beanstalk开发者指南》中的 “创建新环境” 向导。除这些设置以外,将所有设置保留为默认值。
-
对于 Platform,选择 Tomcat。
-
对于 Application code (应用程序节点),选择 Upload your code (上传您的节点),然后选择 Upload (上传)。对于 Source code origin (源代码来源),选择 Public S3 URL (公共 S3 URL),然后将完整的 URL 键入到输出存储桶中的生成输出 ZIP 文件中。请选择 Upload(上传)。
-
-
在 Elastic Beanstalk 将构建输出部署到环境后,您可以在 Web 浏览器中查看结果。转到实例的环境 URL (例如,
http://
)。Web 浏览器将显示文字my-environment-name
.random-string
.region-ID
.elasticbeanstalk.comHello World!
。
场景 B:用于运行 CodeBuild 和部署 CodePipeline 到 Elastic Beanstalk
在此方案中,您将完成准备和上传源代码的步骤。您可以使用控制台创建构建项目, CodeBuild 并使用Amazon Elastic Beanstalk控制台创建一个 Elastic Beanstalk 应用程序和环境。然后,您使用 Amazon CodePipeline 控制台创建管道。在您创建管道之后, CodePipeline 会自动生成源代码,并将生成输出部署到环境中。
步骤 b1:将构建规范文件添加到源代码
在此步骤中,您需要创建构建规范文件并将其添加到您在创建源代码中创建的代码中。然后,您将源代码上传到 S3 输入存储桶或 CodeCommit GitHub、或 Bitbucket 存储库。
-
使用以下内容创建名为
buildspec.yml
的文件。将此文件存储到ROOT
目录。version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/*
-
您的文件结构现在应如下所示。
. └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
-
将
ROOT
目录的内容上传到 S3 输入存储桶或 CodeCommit GitHub、或 Bitbucket 存储库。重要 不要上传
ROOT
,只上传其中的目录和文件ROOT
。如果您使用的是 S3 输入存储桶,则它必须受版本控制。请确保创建一个包含目录结构和文件的 ZIP 文件,然后将其上传至输入存储桶。请不要将
ROOT
添加到 ZIP 文件中,而只添加ROOT
中的目录和文件。有关更多信息,请参阅 Amazon S3 开发人员指南中的如何对存储桶配置版本控制。
步骤 b2:创建构建项目
在本步骤中,您将创建要用于您的管道的 Amazon CodeBuild 构建项目。
通过 https://console.aws.amazon.com/codesuite/codebuild/home
打开Amazon CodeBuild主机。 -
创建构建项目。有关更多信息,请参阅 创建构建项目 (控制台) 和 运行构建(控制台)。除这些设置以外,将所有设置保留为默认值。
-
对于 Environment (环境):
-
对于 Environment image (环境映像),选择 Managed image (托管映像)。
-
对于 Operating system (操作系统),选择 Amazon Linux 2。
-
对于 Runtime(s) (运行时),选择 Standard (标准)。
-
对于图片,选择 aws/codebuild/amazonlinux2-x86_64-standard: 3.0。
-
-
对于 Artifacts (构件):
-
对于 Type (类型),选择 Amazon S3。
-
对于 Bucket name (存储桶名称),输入 S3 存储桶的名称。
-
对于 Name (名称),键入您容易记住的生成输出文件名称。包括
.zip
扩展名。 -
对于 Artifacts packaging,选择 Zip。
-
-
步骤 b3:创建 Elastic Beanstalk 应用程序和环境
在此步骤中,您将创建一个 Elastic Beanstalk 应用程序和环境以供使用 CodePipeline。
通过 https://console.aws.amazon.com/elasticbeanstalk/
打开 Elastic Beanstalk 控制台。 使用 Amazon Elastic Beanstalk 控制台创建应用程序。有关更多信息,请参阅《Amazon Elastic Beanstalk开发者指南》中的管理和配置Amazon Elastic Beanstalk应用程序。
使用 Amazon Elastic Beanstalk 控制台创建环境。有关更多信息,请参阅《Amazon Elastic Beanstalk开发者指南》中的 “创建新环境” 向导。除了 Platform (平台) 之外,保留所有设置的默认值。对于 Platform,选择 Tomcat。
步骤 b4:创建管道并部署
在此步骤中,您将使用 Amazon CodePipeline 控制台创建管道。创建并运行管道后, CodePipeline CodeBuild 用于生成源代码。 CodePipeline 然后使用 Elastic Beanstalk 将构建输出部署到环境中。
-
创建或确定一个服务角色 CodePipeline, CodeBuild和 Elastic Beanstalk 可以使用该角色代表您访问资源。有关更多信息,请参阅先决条件:
-
通过 https://console.aws.amazon.com/codesuite/codepipeline/home
打开 CodePipeline 主机。 使用Amazon区域选择器选择支持 CodeBuild 的Amazon区域。如果您将源代码存储在 S3 输入存储桶中,则输出存储桶必须与输入存储桶位于同一个 Amazon 区域中。
-
创建管道。有关信息,请参阅创建使用 CodeBuild 的管道(CodePipeline 控制台)。除这些设置以外,将所有设置保留为默认值。
-
在 Add build stage (添加构建阶段) 上,对于 Build provider (构建提供商),选择 Amazon CodeBuild。对于项目名称,选择您刚刚创建的构建项目。
-
在 Add deploy stage (添加部署阶段) 上,对于 Deploy provider (部署提供商),选择 Amazon Elastic Beanstalk。
-
在应用程序名称中,选择您刚刚创建的 Elastic Beanstalk 应用程序。
-
对于 Environment name (环境名称),选择您刚刚创建的环境。
-
-
-
在管道成功运行之后,您可以在 Web 浏览器中查看结果。转到实例的环境 URL (例如,
http://
)。Web 浏览器将显示文字my-environment-name
.random-string
.region-ID
.elasticbeanstalk.comHello World!
。
现在,每当您对源代码进行更改并将这些更改上传到原始 S3 输入存储桶或 CodeCommit、 GitHub或 Bitbucket 存储库时,都会 CodePipeline 检测到更改并再次运行管道。这会 CodeBuild 导致重建代码,然后导致 Elastic Beanstalk 将重建后的输出部署到环境中。
场景 C:使用 Elastic Beanstalk CLI 运行Amazon CodeBuild并部署到 Elastic Beanstalk 环境中
在此方案中,您将完成准备和上传源代码的步骤。然后,您运行 Elastic Beanstalk CLI 来创建 Elastic Beanstalk 应用程序和环境,使用它 CodeBuild 来构建源代码,然后将构建输出部署到该环境。有关更多信息,请参阅Amazon Elastic Beanstalk开发者指南 CodeBuild中的使用 EB CLI。
步骤 c1:将文件添加到源代码
在此步骤中,您将一个 Elastic Beanstalk 配置文件和一个 buildspec 文件添加到您在中创建的代码中创建源代码。您还要创建或标识适用于构建规范文件的服务角色。
-
创建或确定 Elastic Beanstalk 和 CLI 可以代表您使用的服务角色。有关信息,请参阅创建 CodeBuild 服务角色。
-
使用以下内容创建名为
buildspec.yml
的文件。将此文件存储到ROOT
目录。version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/* eb_codebuild_settings: CodeBuildServiceRole:
my-service-role-name
ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:4.0 Timeout: 60在前面的代码中,
my-service-role-name
替换为您之前创建或确定的服务角色的名称。 -
您的文件结构现在应如下所示。
. └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
步骤 c2:安装并运行 EB CLI
-
如果您尚未完成此操作,请在您创建源代码的同一计算机或实例上安装和配置 EB CLI。有关信息,请参阅Amazon Elastic Beanstalk开发人员指南中的安装 Elastic Beanstalk 命令行界面 (EB CLI) 和配置 EB CLI。
-
从命令行或终端,运行 cd 命令或类似命令以切换到您的
目录。运行 eb init 命令配置 EB CLI。(root directory name)
/ROOTeb init
出现提示时:
-
选择一个支持的Amazon区域Amazon CodeBuild,以及你想要在哪里创建 Elastic Beanstalk 应用程序和环境。
-
创建 Elastic Beanstalk 应用程序,然后输入该应用程序的名称。
-
选择
Tomcat
平台。 -
选择
Tomcat 8 Java 8
版本。 -
选择是否要使用 SSH 设置对您的环境实例的访问。
-
-
从同一目录中运行eb create命令以创建 Elastic Beanstalk 环境。
eb create
出现提示时:
-
输入环境的名称,或者接受建议的名称。
-
输入该环境的 DNS 别名记录前缀,或者接受建议值。
-
对于此示例,接受 Classic 负载均衡器类型。
-
-
在您运行 eb create 命令之后,EB CLI 将执行以下操作:
-
从源代码中创建一个 ZIP 文件,然后将此 ZIP 文件上传到您账户中的 S3 存储桶。
-
创建 Elastic Beanstalk 应用程序和应用程序版本。
-
创建 CodeBuild 项目。
-
基于新项目运行构建。
-
构建完成后删除该项目。
-
创建 Elastic Beanstalk 环境。
-
将构建输出部署到环境中。
-
-
在 EB CLI 将构建输出部署到环境中后,您可以在 Web 浏览器中查看结果。转到实例的环境 URL (例如,
http://
)。Web 浏览器将显示文字my-environment-name
.random-string
.region-ID
.elasticbeanstalk.comHello World!
。
如果需要,您可以更改源代码,然后从同一目录运行 eb deploy 命令。EB CLI 与 eb create 命令执行的步骤相同,但它将生成输出部署到现有环境中,而不是创建新的环境。
相关资源
有关 Amazon CodeBuild 入门的信息,请参阅通过控制台开始使用 Amazon CodeBuild。
有关中问题排的更多信息 CodeBuild,请参阅故障排除 Amazon CodeBuild。
有关中的配额的信息 CodeBuild,请参阅Amazon CodeBuild 的配额。