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

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

Amazon Elastic BeanstalkCodeBuild 示例

此示例使用Amazon CodeBuild使用 Maven 生成单个 WAR 文件ROOT.war作为生成输出。然后该示例会将 WAR 文件部署到 Amazon Elastic Beanstalk 环境中的实例中。

重要

运行该示例可能会导致您的 Amazon 账户产生相关费用。其中包括可能对 CodeBuild 和收取的费用。Amazon与亚马逊 S3 相关的资源和行动 3Amazon KMS、CloudWatch Logs 和 Amazon EC2。有关更多信息,请参阅 。CodeBuild 定价Amazon S3 定价Amazon Key Management Service定价Amazon CloudWatch 定价, 和Amazon 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. 打开Amazon CodeBuild控制台https://console.aws.amazon.com/codesuite/codebuild/home.

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

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

    • 对于 Environment (环境)

      • 对于 Environment image (环境映像),选择 Managed image (托管映像)

      • 对于 Operating system (操作系统),选择 Amazon Linux 2

      • 对于 Runtime(s) (运行时),选择 Standard (标准)

      • 适用于Image,选择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. 打开Amazon Elastic Beanstalk控制台https://console.aws.amazon.com/elasticbeanstalk.

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

  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:使用 CodePipeline 运行 CodeBuild 并部署到 Elastic Beanstalk

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

步骤 b1:将 buildspec 文件添加到源代码

在此步骤中,您需要创建构建规范文件并将其添加到您在创建源代码中创建的代码中。然后,您将源代码上传到 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. 打开Amazon CodeBuild控制台https://console.aws.amazon.com/codesuite/codebuild/home.

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

    • 对于 Environment (环境)

      • 对于 Environment image (环境映像),选择 Managed image (托管映像)

      • 对于 Operating system (操作系统),选择 Amazon Linux 2

      • 对于 Runtime(s) (运行时),选择 Standard (标准)

      • 适用于Image,选择aws/codebuild/amazonlinux2-x86_64-standard: 3.0.

    • 对于 Artifacts (构件)

      • 对于 Type (类型),选择 Amazon S3

      • 对于 Bucket name (存储桶名称),输入 S3 存储桶的名称。

      • 对于 Name (名称),键入您容易记住的生成输出文件名称。包括 .zip 扩展名。

      • 对于 Artifacts packaging,选择 Zip

步骤 b3:创建 Elastic Beanstalk 应用程序和环境

在此步骤中,您创建要用于 CodePipeline 的 Elastic Beanstalk 应用程序和环境。

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

  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 可用来代表您访问资源的服务角色。有关更多信息,请参阅Prerequisites

  2. 从打开 CodePipeline 控制台https://console.aws.amazon.com/codesuite/codepipeline/home.

    使用Amazon选择区域选择器选择Amazon支持 CodeBuild 的区域。如果您将源代码存储在 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 构建源代码,然后将构建输出部署到环境中。有关更多信息,请参阅 。将 EB CLI 与 CodeBuild 配合使用中的Amazon Elastic Beanstalk开发人员指南.

步骤 c1:将文件添加到源代码

在此步骤中,您需要将 Elastic Beanstalk 配置文件和构建规范文件添加到您在中创建的代码中。创建源代码. 您还要创建或标识适用于构建规范文件的服务角色。

  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。想要了解有关信息,请参阅安装 Elastic Beanstalk 命令行界面 (EB CLI)配置 EB CLI中的Amazon Elastic Beanstalk开发人员指南.

  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 命令执行的步骤相同,但它将生成输出部署到现有环境中,而不是创建新的环境。

相关资源