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

适用于 AWS CodeBuild 的 AWS Elastic Beanstalk 示例

此示例指示 AWS CodeBuild 使用 Maven 来生成一个名为 my-web-app.war 的 WAR 文件作为构建输出。然后该示例会将 WAR 文件部署到 Elastic Beanstalk 环境中的实例中。

重要

运行该示例可能会导致您的 AWS 账户产生相关费用。这些费用包括可能针对 CodeBuild 和 AWS 资源以及与 Amazon S3、AWS KMS、CloudWatch Logs 和 Amazon EC2 相关的操作收取的费用。有关更多信息,请参阅 CodeBuild 定价Amazon S3 定价AWS Key Management Service 定价Amazon CloudWatch 定价Amazon EC2 定价

创建源代码

在本节中,您将使用 Maven 生成源代码。稍后,您将使用 AWS CodeBuild 基于该源代码生成 WAR 文件。

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

  2. 切换到您的本地计算机或实例上的空目录,然后运行此 Maven 命令。

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-web-app -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

    如果成功,将创建此目录结构和文件。

    (root directory name) `-- my-web-app |-- pom.xml `-- src `-- main |-- resources `-- webapp |-- WEB-INF | `-- web.xml `-- index.jsp
  3. (root directory name)/my-web-app 目录中创建名为 .ebextensions 的子目录。在 .ebextensions 子目录中,使用此内容创建一个名为 fix-path.config 的文件。

    container_commands: fix_path: command: "unzip my-web-app.war 2>&1 > /var/log/my_last_deploy.log"

在您运行 Maven 后,请继续执行以下方案之一:

方案 A:手动运行 AWS CodeBuild 并手动部署到 Elastic Beanstalk

在此方案中,您将创建并上传源代码。然后,您将使用 AWS CodeBuild 和 Elastic Beanstalk 控制台生成源代码,创建 Elastic Beanstalk 应用程序和环境,并将生成输出部署到环境中。

步骤 A1:将文件添加至源代码

在此步骤中,您将 Elastic Beanstalk 配置文件和构建规范文件添加到创建源代码的代码中。然后,您要将源代码上传至 Amazon S3 输入存储桶、AWS CodeCommit 或 GitHub 存储库。

  1. 使用以下内容创建名为 buildspec.yml 的文件。将此文件存储到 (root directory name)/my-web-app 目录。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/my-web-app.war my-web-app.war artifacts: files: - my-web-app.war - .ebextensions/**/*
  2. 您的文件结构现在应如下所示。

    (root directory name) `-- my-web-app |-- .ebextensions | `-- fix-path.config |-- src | `-- main | |-- resources | `-- webapp | |-- WEB-INF | | `-- web.xml | `-- index.jsp |-- buildpsec.yml `-- pom.xml
  3. my-web-app 目录的内容上传到 Amazon S3 输入存储桶或者上传到 CodeCommit、GitHub 或 Bitbucket 存储库。

    重要

    请不要上传 (root directory name)(root directory name)/my-web-app,而只上传 (root directory name)/my-web-app 中的目录和文件。

    如果您使用的是 Amazon S3 输入存储桶,则它必须有版本控制。请确保创建一个包含目录结构和文件的 ZIP 文件,然后将其上传至输入存储桶。请不要将 (root directory name)(root directory name)/my-web-app 添加到 ZIP 文件中,而只添加 (root directory name)/my-web-app 中的目录和文件。有关更多信息,请参阅如何对存储桶配置版本控制

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

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

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

  2. Open the AWS CodeBuild console at https://console.amazonaws.cn/codesuite/codebuild/home.

    使用 AWS 区域选择器选择一个支持 CodeBuild 并与存储 Amazon S3 输出存储桶的区域相匹配的区域。

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

    • 对于 Environment (环境)

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

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

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

      • 对于 Image (映像),选择 aws/codebuild/amazonlinux2-x86_64-standard:1.0

    • 对于 Artifacts (构件)

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

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

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

      • 对于 Artifacts packaging,选择 Zip

步骤 A3:创建应用程序和环境并部署

在此步骤中,您将使用 Elastic Beanstalk 控制台创建应用程序和环境。作为创建环境的一部分,您要将之前步骤的生成输出部署到环境中。

  1. 通过 https://console.amazonaws.cn/elasticbeanstalk 打开 Elastic Beanstalk 控制台。

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

  2. 创建 Elastic Beanstalk 应用程序。有关更多信息,请参阅管理和配置 AWS Elastic Beanstalk 应用程序

  3. 为此应用程序创建 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 运行 AWS CodeBuild 并部署到 Elastic Beanstalk 中

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

步骤 B1:将构建规范文件添加至源代码

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

  1. 使用以下内容创建名为 buildspec.yml 的文件。将此文件存储到 (root directory name)/my-web-app 目录。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/my-web-app.war my-web-app.war artifacts: files: - my-web-app.war - .ebextensions/**/* base-directory: 'target/my-web-app'
  2. 您的文件结构现在应如下所示。

    (root directory name) `-- my-web-app |-- .ebextensions | `-- fix-path.config |-- src | `-- main | |-- resources | `-- webapp | |-- WEB-INF | | `-- web.xml | `-- index.jsp |-- buildpsec.yml `-- pom.xml
  3. my-web-app 目录的此内容上传到 Amazon S3 输入存储桶或者上传到 CodeCommit、GitHub 或 Bitbucket 存储库。

    重要

    请不要上传 (root directory name)(root directory name)/my-web-app,而只上传 (root directory name)/my-web-app 中的目录和文件。

    如果您使用的是 Amazon S3 输入存储桶,则它必须有版本控制。请确保创建一个包含目录结构和文件的 ZIP 文件,然后将其上传至输入存储桶。请不要将 (root directory name)(root directory name)/my-web-app 添加到 ZIP 文件中,而只添加 (root directory name)/my-web-app 中的目录和文件。有关更多信息,请参阅如何对存储桶配置版本控制

步骤 B:创建构建项目

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

  1. Open the AWS CodeBuild console at https://console.amazonaws.cn/codesuite/codebuild/home.

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

    • 对于 Environment (环境)

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

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

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

      • 对于 Image (映像),选择 aws/codebuild/amazonlinux2-x86_64-standard:1.0

    • 对于 Artifacts (构件)

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

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

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

      • 对于 Artifacts packaging,选择 Zip

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

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

  1. Open the Elastic Beanstalk console at https://console.amazonaws.cn/elasticbeanstalk/.

  2. 使用 Elastic Beanstalk 控制台创建应用程序。有关更多信息,请参阅管理和配置 AWS Elastic Beanstalk 应用程序

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

步骤 B4:创建管道并部署

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

  1. 创建或标识 CodePipeline、CodeBuild 和 Elastic Beanstalk 可用来代表您工作的服务角色。有关更多信息,请参阅先决条件

  2. https://console.amazonaws.cn/codesuite/home 中打开 CodePipeline 控制台。

    使用 AWS 区域选择器选择一个支持 CodeBuild 的区域,如果您将源代码存储在 Amazon S3 输入存储桶中,请选择您存储输入存储桶的区域。

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

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

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

      • 对于 Application name (应用程序名称),选择您刚刚创建的 Elastic Beanstalk 应用程序。

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

  4. 在管道成功运行之后,您可以在 Web 浏览器中查看结果。转到实例的环境 URL (例如,http://my-environment-name.random-string.region-ID.elasticbeanstalk.com)。Web 浏览器将显示文字 Hello World!

现在,只要您更改源代码并将这些更改上传到原始 Amazon S3 输入存储桶或者上传到 CodeCommit、GitHub 或 Bitbucket 存储库时,CodePipeline 就会检测更改并再次运行管道。这将导致 CodeBuild 重新生成代码,然后 Elastic Beanstalk 会将重新生成输出部署到环境中。

方案 C:使用 Elastic Beanstalk CLI 运行 AWS CodeBuild 并将其部署到 Elastic Beanstalk 环境中

在此方案中,您将完成准备和上传源代码的步骤。然后,您将运行 Elastic Beanstalk CLI 创建 Elastic Beanstalk 应用程序和环境,使用 CodeBuild 生成源代码,并将生成输出部署到环境中。有关更多信息,请参阅 AWS Elastic Beanstalk Developer Guide 中的将 EB CLI 与 CodeBuild 结合使用

步骤 C1:将文件添加至源代码

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

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

  2. 使用以下内容创建名为 buildspec.yml 的文件。将此文件存储到 (root directory name)/my-web-app 目录。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/my-web-app.war my-web-app.war artifacts: files: - my-web-app.war - .ebextensions/**/* eb_codebuild_settings: CodeBuildServiceRole: my-service-role-name ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:2.0 Timeout: 60

    在前面的代码中,将 my-service-role-name 替换为您之前创建或标识的服务角色的名称。

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

    (root directory name) `-- my-web-app |-- .ebextensions | `-- fix-path.config |-- src | `-- main | |-- resources | `-- webapp | |-- WEB-INF | | `-- web.xml | `-- index.jsp |-- buildpsec.yml `-- pom.xml

步骤 C2:安装并运行 EB CLI

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

  2. 从您的计算机或实例的命令行或终端中,运行 cd 命令或类似命令以切换到 (root directory name)/my-web-app 目录。运行 eb init 命令配置 EB CLI。

    eb init

    出现提示时:

    • 选择一个支持 AWS CodeBuild 且您要在其中创建 Elastic Beanstalk 应用程序和环境的 AWS 区域。

    • 创建 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 文件上传至您账户中的 Amazon S3 存储桶。

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

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

相关资源