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

CodeBuild 的 Buildspec 文件示例中的运行时版本

如果您使用的是 Amazon Linux 2 (AL2) 标准映像版本 1.0 或更高版本或者 Ubuntu 标准映像版本 2.0 或更高版本,必须在构建规范文件的 runtime-versions 部分中至少指定一个运行时及其版本。本示例向您展示了如何更改您的项目运行时、指定多个运行时以及指定依赖于另一个运行时的运行时。

注意

如果您在构建容器中使用 Docker,则您的构建必须在特权模式下运行。有关更多信息,请参阅 在 CodeBuild 中运行构建在 CodeBuild 中创建构建项目

更新您的运行时版本

您可以通过修改 buildpec 文件的 runtime-versions 部分,将项目使用的运行时更新到新版本。以下示例说明如何指定 Corretto 版本 8 和 11:

  • 一个 runtime-versions 部分,指定 Corretto 版本 8(仅限 Amazon Linux 2):

    phases: install: runtime-versions: java: corretto8
  • 一个 runtime-versions 部分,指定 Corretto 版本 11(仅限 Amazon Linux 2):

    phases: install: runtime-versions: java: corretto11

以下示例说明如何指定 Java 版本 8 和 10:

  • 一个 runtime-versions 部分,指定 Java 版本 8(仅限 Ubuntu):

    phases: install: runtime-versions: java: openjdk8
  • 一个 runtime-versions 部分,指定 Java 版本 11(仅限 Ubuntu):

    phases: install: runtime-versions: java: openjdk11

以下示例说明如何指定不同版本的 Node.js:

  • 一个 runtime-versions 部分,指定 Node.js 版本 8:

    phases: install: runtime-versions: nodejs: 8
  • 一个 runtime-versions 部分,指定 Node.js 版本 10:

    phases: install: runtime-versions: nodejs: 10

本示例演示一个项目,该项目从 Java 版本 8 运行时开始,然后更新到 Java 版本 10 运行时。

  1. 按照 创建源代码 中的步骤 1 和 2 生成源代码。如果成功,系统会创建一个名为 my-web-app 的目录,其中包含您的源文件。

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

    version: 0.2 phases: install: runtime-versions: java: openjdk8 build: commands: - java -version - mvn package artifacts: files: - '**/*' base-directory: 'target/my-web-app'

    在 buildspec 文件中:

    • runtime-versions 部分指定项目使用 Java 运行时版本 8。

    • - java -version 命令显示您的项目在执行构建时所使用的 Java 版本。

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

    (root directory name) -- my-web-app |-- src | `-- main | |-- resources | `-- webapp | |-- WEB-INF | | `-- web.xml | `-- index.jsp |-- buildspec.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 中的目录和文件。

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

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

    • 对于 Environment (环境)

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

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

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

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

  6. 选择 Start build

  7. Build configuration (构建配置) 上,接受默认值,然后选择 Start build (开始构建)

  8. 当构建完成后,在 Build logs (构建日志) 选项卡上查看构建输出。您应该可以看到类似于如下所示的输出内容:

    [Container] 2019/05/14 20:45:07 Entering phase INSTALL [Container] Date Time Running command echo "Installing Java version 8 ..." Installing Java version 8 ... [Container] Date Time Running command export JAVA_HOME="$JAVA_8_HOME" [Container] Date Time Running command export JRE_HOME="$JRE_8_HOME" [Container] Date Time Running command export JDK_HOME="$JDK_8_HOME" [Container] Date Time Running command for tool_path in "$JAVA_8_HOME"/bin/* "$JRE_8_HOME"/bin/*;
  9. 使用 Java 版本 11 更新 runtime-versions 部分:

    install: runtime-versions: java: openjdk11
  10. 保存更改后,再次运行您的构建并查看构建输出。您应看到已安装的 Java 版本为 11。您应该可以看到类似于如下所示的输出内容:

    [Container] 2019/05/14 20:45:07 Entering phase INSTALL [Container] Date Time Running command echo "Installing Java version 11 ..." Installing Java version 11 ... [Container] Date Time Running command export JAVA_HOME="$JAVA_11_HOME" [Container] Date Time Running command export JRE_HOME="$JRE_11_HOME" [Container] Date Time Running command export JDK_HOME="$JDK_11_HOME" [Container] Date Time Running command for tool_path in "$JAVA_11_HOME"/bin/* "$JRE_11_HOME"/bin/*;

指定运行时依赖关系

本示例说明如何指定运行时和具有依赖关系的运行时。例如,Android 运行时版本 28 依赖于 Java 或 Corretto 运行时版本 8。如果您指定 Android 版本 28 并使用 Amazon Linux 2,则还必须指定 Corretto 版本 8。如果您指定 Android 版本 28 并使用 Ubuntu,则还必须指定 Java 版本 8。

本例中的构建项目使用 GitHub AWS 示例存储库中的源代码。源代码使用 Android 版本 28 运行时,构建项目使用 Amazon Linux 2,因此构建规范还必须指定 Corretto 版本 8。

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

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

    • 对于 Environment (环境)

      • 对于 Source provider (源提供商),选择 GitHub

      • 对于 Repository (存储库),选择 Public repository (公有存储库)

      • 对于 Repository URL (存储库 URL),键入 https://github.com/aws-samples/aws-mobile-android-notes-tutorial

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

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

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

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

  3. 对于 Build specifications (构建规范),选择 Insert build commands (插入构建命令),然后选择 Switch to editor (切换到编辑器)

  4. Build commands (构建命令) 中,将占位符文本替换为以下内容:

    version: 0.2 phases: install: runtime-versions: android: 28 java: corretto8 build: commands: - ./gradlew assembleDebug artifacts: files: - app/build/outputs/apk/app-debug.apk

    runtime-versions 部分同时指定 Android 版本 28 和 Java 版本 8 运行时。

  5. 选择 Create build project (创建构建项目)

  6. 选择 Start build

  7. Build configuration (构建配置) 上,接受默认值,然后选择 Start build (开始构建)

  8. 当构建完成后,在 Build logs (构建日志) 选项卡上查看构建输出。您应该可以看到类似于如下所示的输出内容。该内容中显示已安装 Android 版本 28 和 Corretto 版本 8:

    [Container] 2019/05/14 23:21:42 Entering phase INSTALL [Container] Date Time Running command echo "Installing Android version 28 ..." Installing Android version 28 ... [Container] Date Time Running command echo "Installing Java version 8 ..." Installing Java version 8 ...

指定两个运行时

您可以在同一个 CodeBuild 构建项目中指定多个运行时。此示例项目使用两个源文件:一个使用 Go 运行时,另一个使用 Node.js 运行时。

  1. 创建一个名为 my-source 的目录。

  2. my-source 目录中,创建一个名为 golang-app 的目录。

  3. 使用以下内容创建名为 hello.go 的文件。将此文件存储到 golang-app 目录。

    package main import "fmt" func main() { fmt.Println("hello world from golang") fmt.Println("1+1 =", 1+1) fmt.Println("7.0/3.0 =", 7.0/3.0) fmt.Println(true && false) fmt.Println(true || false) fmt.Println(!true) fmt.Println("good bye from golang") }
  4. my-source 目录中,创建一个名为 nodejs-app 的目录。它应该与 golang-app 目录同级。

  5. 使用以下内容创建名为 index.js 的文件。将此文件存储到 nodejs-app 目录。

    console.log("hello world from nodejs"); console.log("1+1 =" + (1+1)); console.log("7.0/3.0 =" + 7.0/3.0); console.log(true && false); console.log(true || false); console.log(!true); console.log("good bye from nodejs");
  6. 使用以下内容创建名为 package.json 的文件。将此文件存储到 nodejs-app 目录。

    { "name": "mycompany-app", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"run some tests here\"" }, "author": "", "license": "ISC" }
  7. 使用以下内容创建名为 buildspec.yml 的文件。将文件存储在 my-source 目录中,该目录与 nodejs-app 以及 golang-app 目录同级。runtime-versions 部分指定 Node.js 版本 10 运行时和 Go 版本 1.12 运行时。

    version: 0.2 phases: install: runtime-versions: golang: 1.12 nodejs: 10 build: commands: - echo Building the Go code... - cd $CODEBUILD_SRC_DIR/golang-app - go build hello.go - echo Building the Node code... - cd $CODEBUILD_SRC_DIR/nodejs-app - npm run test artifacts: secondary-artifacts: golang_artifacts: base-directory: golang-app files: - hello nodejs_artifacts: base-directory: nodejs-app files: - index.js - package.json
  8. 您的文件结构现在应如下所示。

    -- my-source |-- golang-app | -- hello.go |-- nodejs.app | -- index.js | -- package.json |-- buildspec.yml
  9. my-source 目录的内容上传到 Amazon S3 输入存储桶或者上传到 CodeCommit、GitHub 或 Bitbucket 存储库。

    重要

    如果您使用的是 Amazon S3 输入存储桶,请确保创建一个包含目录结构和文件的 ZIP 文件,然后将其上传至输入存储桶。请不要将 my-source 添加到 ZIP 文件中,而只添加 my-source 中的目录和文件。

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

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

    • 对于 Environment (环境)

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

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

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

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

  12. 选择 Create build project (创建构建项目)

  13. 选择 Start build

  14. Build configuration (构建配置) 上,接受默认值,然后选择 Start build (开始构建)

  15. 当构建完成后,在 Build logs (构建日志) 选项卡上查看构建输出。您应该可以看到类似于如下所示的输出内容。它显示来自 Go 和 Node.js 运行时的输出,还显示来自 Go 和 Node.js 应用程序的输出。

    [Container] Date Time Entering phase INSTALL [Container] Date Time Running command echo "Installing Go version 1.12 ..." Installing Go version 1.12 ... [Container] Date Time Running command echo "Installing Node.js version 10 ..." Installing Node.js version 10 ... [Container] Date Time Running command n 10.15.3 [Container] Date Time Phase complete: INSTALL State: SUCCEEDED [Container] Date Time Phase context status code: Message: [Container] Date Time Entering phase PRE_BUILD [Container] Date Time Phase complete: PRE_BUILD State: SUCCEEDED [Container] Date Time Phase context status code: Message: [Container] Date Time Entering phase BUILD [Container] Date Time Running command echo Building the Go code... Building the Go code... [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/golang-app [Container] Date Time Running command go build hello.go [Container] Date Time Running command echo Building the Node code... Building the Node code... [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/nodejs-app [Container] Date Time Running command npm run test > mycompany-app@1.0.0 test /codebuild/output/src924084119/src/nodejs-app > echo "run some tests here" run some tests here