Amazon Elastic Beanstalk的示例 CodeBuild - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

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 定价Amazon S3 定价Amazon Key Management Service定价亚马逊 CloudWatch 定价和 A mazon EC2 定价

创建源代码

在本节中,您将使用 Maven 生成源代码。稍后,您可以 CodeBuild 使用此源代码构建 WAR 文件。

  1. 下载并安装 Maven。有关信息,请参阅 Apache Maven 网站上的下载 Apache Maven安装 Apache Maven

  2. 切换到您的本地计算机或实例上的空目录,然后运行此 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
  3. 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 存储库。

  1. 使用以下内容创建名为 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/**/*
  2. 您的文件结构现在应如下所示。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
  3. ROOT目录的内容上传到 S3 输入存储桶或 CodeCommit GitHub、或 Bitbucket 存储库。

    重要

    不要上传ROOT,只上传其中的目录和文件ROOT

    如果您使用的是 S3 输入存储桶,则它必须受版本控制。请确保创建一个包含目录结构和文件的 ZIP 文件,然后将其上传至输入存储桶。请不要将 ROOT 添加到 ZIP 文件中,而只添加 ROOT 中的目录和文件。有关更多信息,请参阅 Amazon S3 开发人员指南中的如何对存储桶配置版本控制

步骤 a2:创建构建项目并运行构建

在此步骤中,您将使用 Amazon CodeBuild 控制台创建构建项目,然后运行构建。

  1. 创建或选择 S3 输出存储桶以存储构建输出。如果您将源代码存储在 S3 输入存储桶中,则输出存储桶必须与输入存储桶位于同一个 Amazon 区域中。

  2. 通过 https://console.aws.amazon.com/codesuite/codebuild/home 打开Amazon CodeBuild主机。

    使用Amazon区域选择器选择支持 CodeBuild 的Amazon区域。这必须是用于存储 S3 输出存储桶的同一区域。

  3. 创建构建项目,然后运行构建。有关更多信息,请参阅 创建构建项目 (控制台)运行构建(控制台)。除这些设置以外,将所有设置保留为默认值。

    • 对于 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 控制台创建应用程序和环境。作为创建环境的一部分,您要将之前步骤的生成输出部署到环境中。

  1. 通过 https://console.aws.amazon.com/elasticbeanstalk 打开Amazon Elastic Beanstalk主机。

    使用Amazon区域选择器选择存储 S3 输出存储桶的Amazon区域。

  2. 创建 Elastic Beanstalk 应用程序。有关更多信息,请参阅《Amazon Elastic Beanstalk开发者指南》中的管理和配置Amazon Elastic Beanstalk应用程序

  3. 为该应用程序创建 Elastic Beanstalk 环境。有关更多信息,请参阅Amazon Elastic Beanstalk开发者指南》中的 “创建新环境” 向导。除这些设置以外,将所有设置保留为默认值。

    • 对于 Platform,选择 Tomcat

    • 对于 Application code (应用程序节点),选择 Upload your code (上传您的节点),然后选择 Upload (上传)。对于 Source code origin (源代码来源),选择 Public S3 URL (公共 S3 URL),然后将完整的 URL 键入到输出存储桶中的生成输出 ZIP 文件中。请选择 Upload(上传)。

  4. 在 Elastic Beanstalk 将构建输出部署到环境后,您可以在 Web 浏览器中查看结果。转到实例的环境 URL (例如,http://my-environment-name.random-string.region-ID.elasticbeanstalk.com)。Web 浏览器将显示文字 Hello World!

场景 B:用于运行 CodeBuild 和部署 CodePipeline 到 Elastic Beanstalk

在此方案中,您将完成准备和上传源代码的步骤。您可以使用控制台创建构建项目, CodeBuild 并使用Amazon Elastic Beanstalk控制台创建一个 Elastic Beanstalk 应用程序和环境。然后,您使用 Amazon CodePipeline 控制台创建管道。在您创建管道之后, CodePipeline 会自动生成源代码,并将生成输出部署到环境中。

步骤 b1:将构建规范文件添加到源代码

在此步骤中,您需要创建构建规范文件并将其添加到您在创建源代码中创建的代码中。然后,您将源代码上传到 S3 输入存储桶或 CodeCommit GitHub、或 Bitbucket 存储库。

  1. 使用以下内容创建名为 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/**/*
  2. 您的文件结构现在应如下所示。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
  3. ROOT目录的内容上传到 S3 输入存储桶或 CodeCommit GitHub、或 Bitbucket 存储库。

    重要

    不要上传ROOT,只上传其中的目录和文件ROOT

    如果您使用的是 S3 输入存储桶,则它必须受版本控制。请确保创建一个包含目录结构和文件的 ZIP 文件,然后将其上传至输入存储桶。请不要将 ROOT 添加到 ZIP 文件中,而只添加 ROOT 中的目录和文件。有关更多信息,请参阅 Amazon S3 开发人员指南中的如何对存储桶配置版本控制

步骤 b2:创建构建项目

在本步骤中,您将创建要用于您的管道的 Amazon CodeBuild 构建项目。

  1. 通过 https://console.aws.amazon.com/codesuite/codebuild/home 打开Amazon CodeBuild主机。

  2. 创建构建项目。有关更多信息,请参阅 创建构建项目 (控制台)运行构建(控制台)。除这些设置以外,将所有设置保留为默认值。

    • 对于 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。

  1. 通过 https://console.aws.amazon.com/elasticbeanstalk/ 打开 Elastic Beanstalk 控制台。

  2. 使用 Amazon Elastic Beanstalk 控制台创建应用程序。有关更多信息,请参阅《Amazon Elastic Beanstalk开发者指南》中的管理和配置Amazon Elastic Beanstalk应用程序

  3. 使用 Amazon Elastic Beanstalk 控制台创建环境。有关更多信息,请参阅Amazon Elastic Beanstalk开发者指南》中的 “创建新环境” 向导。除了 Platform (平台) 之外,保留所有设置的默认值。对于 Platform,选择 Tomcat

步骤 b4:创建管道并部署

在此步骤中,您将使用 Amazon CodePipeline 控制台创建管道。创建并运行管道后, CodePipeline CodeBuild 用于生成源代码。 CodePipeline 然后使用 Elastic Beanstalk 将构建输出部署到环境中。

  1. 创建或确定一个服务角色 CodePipeline, CodeBuild和 Elastic Beanstalk 可以使用该角色代表您访问资源。有关更多信息,请参阅先决条件

  2. 通过 https://console.aws.amazon.com/codesuite/codepipeline/home 打开 CodePipeline 主机。

    使用Amazon区域选择器选择支持 CodeBuild 的Amazon区域。如果您将源代码存储在 S3 输入存储桶中,则输出存储桶必须与输入存储桶位于同一个 Amazon 区域中。

  3. 创建管道。有关信息,请参阅创建使用 CodeBuild 的管道(CodePipeline 控制台)。除这些设置以外,将所有设置保留为默认值。

    • Add build stage (添加构建阶段) 上,对于 Build provider (构建提供商),选择 Amazon CodeBuild。对于项目名称,选择您刚刚创建的构建项目。

    • Add deploy stage (添加部署阶段) 上,对于 Deploy provider (部署提供商),选择 Amazon Elastic Beanstalk

      • 应用程序名称中,选择您刚刚创建的 Elastic Beanstalk 应用程序。

      • 对于 Environment name (环境名称),选择您刚刚创建的环境。

  4. 在管道成功运行之后,您可以在 Web 浏览器中查看结果。转到实例的环境 URL (例如,http://my-environment-name.random-string.region-ID.elasticbeanstalk.com)。Web 浏览器将显示文字 Hello 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 文件添加到您在中创建的代码中创建源代码。您还要创建或标识适用于构建规范文件的服务角色。

  1. 创建或确定 Elastic Beanstalk 和 CLI 可以代表您使用的服务角色。有关信息,请参阅创建 CodeBuild 服务角色

  2. 使用以下内容创建名为 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替换为您之前创建或确定的服务角色的名称。

  3. 您的文件结构现在应如下所示。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml

步骤 c2:安装并运行 EB CLI

  1. 如果您尚未完成此操作,请在您创建源代码的同一计算机或实例上安装和配置 EB CLI。有关信息,请参阅Amazon Elastic Beanstalk开发人员指南中的安装 Elastic Beanstalk 命令行界面 (EB CLI) 和配置 EB CLI。

  2. 从命令行或终端,运行 cd 命令或类似命令以切换到您的 (root directory name)/ROOT 目录。运行 eb init 命令配置 EB CLI。

    eb init

    出现提示时:

    • 选择一个支持的Amazon区域Amazon CodeBuild,以及你想要在哪里创建 Elastic Beanstalk 应用程序和环境。

    • 创建 Elastic Beanstalk 应用程序,然后输入该应用程序的名称。

    • 选择 Tomcat 平台。

    • 选择 Tomcat 8 Java 8 版本。

    • 选择是否要使用 SSH 设置对您的环境实例的访问。

  3. 从同一目录中运行eb create命令以创建 Elastic Beanstalk 环境。

    eb create

    出现提示时:

    • 输入环境的名称,或者接受建议的名称。

    • 输入该环境的 DNS 别名记录前缀,或者接受建议值。

    • 对于此示例,接受 Classic 负载均衡器类型。

  4. 在您运行 eb create 命令之后,EB CLI 将执行以下操作:

    1. 从源代码中创建一个 ZIP 文件,然后将此 ZIP 文件上传到您账户中的 S3 存储桶。

    2. 创建 Elastic Beanstalk 应用程序和应用程序版本。

    3. 创建 CodeBuild 项目。

    4. 基于新项目运行构建。

    5. 构建完成后删除该项目。

    6. 创建 Elastic Beanstalk 环境。

    7. 将构建输出部署到环境中。

  5. 在 EB CLI 将构建输出部署到环境中后,您可以在 Web 浏览器中查看结果。转到实例的环境 URL (例如,http://my-environment-name.random-string.region-ID.elasticbeanstalk.com)。Web 浏览器将显示文字 Hello World!

如果需要,您可以更改源代码,然后从同一目录运行 eb deploy 命令。EB CLI 与 eb create 命令执行的步骤相同,但它将生成输出部署到现有环境中,而不是创建新的环境。

相关资源