CodeBuild の buildspec ファイルサンプルのランタイムバージョン - AWS CodeBuild

CodeBuild の buildspec ファイルサンプルのランタイムバージョン

Amazon Linux 2 (AL2) 標準イメージバージョン 1.0 以降、または Ubuntu 標準イメージバージョン 2.0 以降を使用している場合は、buildspec ファイルの runtime-versions セクションで 1 つ以上のランタイムを指定できます。このサンプルでは、プロジェクトランタイムを変更する方法、複数のランタイムを指定する方法、および別のランタイムに依存するランタイムを指定する方法を示します。サポートされているランタイムについては、「CodeBuild に用意されている Docker イメージ」を参照してください。

注記

ビルドコンテナで Docker を使用している場合、ビルドは特権モードで実行する必要があります。詳細については、「AWS CodeBuild でのビルドの実行」および「 でのビルドプロジェクトの作成AWS CodeBuild」を参照してください。

ランタイムバージョンの更新

プロジェクトで使用されるランタイムを新しいバージョンに変更するには、buildpec ファイルの runtime-versions セクションを更新します。以下の例では、Java バージョン 8 および 11 を指定する方法を示します。

  • Java バージョン 8 を指定する runtime-versions セクション:

    phases: install: runtime-versions: java: corretto8
  • Java バージョン 11 を指定する runtime-versions セクション:

    phases: install: runtime-versions: java: corretto11

次の例では、Ubuntu 標準イメージ 5.0 または Amazon Linux 2 標準イメージ 3.0 を使用して、Python の異なるバージョンを指定する方法を示しています。

  • Python バージョン 3.7 を指定する runtime-versions セクション:

    phases: install: runtime-versions: python: 3.7
  • Python バージョン 3.8 を指定する runtime-versions セクション:

    phases: install: runtime-versions: python: 3.8

このサンプルでは、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: corretto8 build: commands: - java -version - mvn package artifacts: files: - '**/*' base-directory: 'target/my-web-app'

    buildspec ファイル:

    • この runtime-versions セクションでは、プロジェクトでバージョン 8 のJava ランタイムを使用することを指定します。

    • この - 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」ディレクトリの内容を、S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。

    重要

    (root directory name) または (root directory name)/my-web-app をアップロードしないでください。アップロードするのは、(root directory name)/my-web-app のディレクトリとファイルだけです。

    S3 入力バケットを使用している場合は、ディレクトリ構造とファイルを必ず ZIP ファイルに圧縮してから入力バケットにアップロードしてください。(root directory name) または (root directory name)/my-web-app を ZIP ファイルに追加しないでください。追加するのは、(root directory name)/my-web-app のディレクトリとファイルだけです。

  4. AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

  5. ビルドプロジェクトを作成します。詳細については、「ビルドプロジェクトの作成 (コンソール)」および「ビルドの実行 (コンソール)」を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。

    • [環境] の場合:

      • [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。

      • [オペレーティングシステム] で、[Amazon Linux 2] を選択します。

      • [ランタイム] で、[Standard (標準)] を選択します。

      • [イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:3.0] を選択します。

  6. [Start build] を選択します。

  7. [ビルド設定] でデフォルト値をそのまま使用して、[ビルドの開始] を選択します。

  8. ビルドが完了したら、[ビルドログ] タブでビルド出力を表示します。次のような出力が表示されます。

    [Container] Date Time Phase is DOWNLOAD_SOURCE [Container] Date Time CODEBUILD_SRC_DIR=/codebuild/output/src460614277/src [Container] Date Time YAML location is /codebuild/output/src460614277/src/buildspec.yml [Container] Date Time Processing environment variables [Container] Date Time Selecting 'java' runtime version 'corretto8' based on manual selections... [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. runtime-versions セクションを Java バージョン 11 で更新します。

    install: runtime-versions: java: corretto11
  10. 変更を保存したら、ビルドを再実行し、ビルド出力を表示します。現在インストールされている Java のバージョンが 11 であることが表示されます。次のような出力が表示されます。

    [Container] Date Time Phase is DOWNLOAD_SOURCE [Container] Date Time CODEBUILD_SRC_DIR=/codebuild/output/src460614277/src [Container] Date Time YAML location is /codebuild/output/src460614277/src/buildspec.yml [Container] Date Time Processing environment variables [Container] Date Time Selecting 'java' runtime version 'corretto11' based on manual selections... 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 ランタイムバージョンはすべて Java ランタイムバージョン 8 に依存します。たとえば、Android バージョン 29 を指定し、Amazon Linux 2 または Ubuntu を使用する場合は、Java バージョン 8 も指定できます。依存ランタイムを指定しないと、CodeBuild が代わりに選択しようとします。

この例のビルドプロジェクトは GitHub AWS サンプルリポジトリのソースコードを使用します。ソースコードでは Android バージョン 28 ランタイムを使用し、ビルドプロジェクトでは Amazon Linux 2 を使用するため、buildspec でも Java バージョン 8 を指定します。

  1. AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

  2. ビルドプロジェクトを作成します。詳細については、「ビルドプロジェクトの作成 (コンソール)」および「ビルドの実行 (コンソール)」を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。

    • ソースの場合:

      • [ソースプロバイダー] で [GitHub] を選択します。

        以前に GitHub アカウントに接続していない場合は、[OAuth を使用して接続する] または [GitHub の個人用アクセストークンで接続する] を選択し、手順に従って GitHub に接続 (または再接続) して、AWS CodeBuild へのアクセスを許可します。

      • [レポジトリ] で、[パブリックレポジトリ] を選択します。

      • [リポジトリの URL] に、「https://github.com/aws-samples/aws-mobile-android-notes-tutorial」と入力します。

    • [環境] の場合:

      • [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。

      • [オペレーティングシステム] で、[Amazon Linux 2] を選択します。

      • [ランタイム] で、[Standard (標準)] を選択します。

      • [イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:3.0] を選択します。

  3. [ビルド仕様] で、[ビルドコマンドの挿入] を選択して [Switch to editor (エディタに切り替え)] を選択します。

  4. [ビルドコマンド] で、プレースホルダーテキストを次のように置き換えます。

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

    runtime-versions セクションでは、Android バージョン 29 と Java バージョン 8 の両方のランタイムを指定します。

  5. [Create build project (ビルドプロジェクトの作成)] を選択します。

  6. [Start build] を選択します。

  7. [ビルド設定] でデフォルト値をそのまま使用して、[ビルドの開始] を選択します。

  8. ビルドが完了したら、[ビルドログ] タブでビルド出力を表示します。次のような出力が表示されます。Android バージョン 29 および Java バージョン 8 がインストールされていることが表示されます。

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

2 つのランタイムの指定

同じ CodeBuild ビルドプロジェクトで、複数のランタイムを指定できます。このサンプルプロジェクトでは、2 つのソースファイルを使用します。1 つは Go ランタイムを使用し、もう 1 つは 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 バージョン 12 および Go バージョン 1.13 ランタイムを指定します。

    version: 0.2 phases: install: runtime-versions: golang: 1.13 nodejs: 12 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」ディレクトリの内容を、S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。

    重要

    S3 入力バケットを使用している場合は、ディレクトリ構造とファイルを必ず ZIP ファイルに圧縮してから入力バケットにアップロードしてください。my-source を ZIP ファイルに追加しないでください。追加するのは、my-source のディレクトリとファイルのみです。

  10. AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

  11. ビルドプロジェクトを作成します。詳細については、「ビルドプロジェクトの作成 (コンソール)」および「ビルドの実行 (コンソール)」を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。

    • [環境] の場合:

      • [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。

      • [オペレーティングシステム] で、[Amazon Linux 2] を選択します。

      • [ランタイム] で、[Standard (標準)] を選択します。

      • [イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:3.0] を選択します。

  12. [Create build project (ビルドプロジェクトの作成)] を選択します。

  13. [Start build] を選択します。

  14. [ビルド設定] でデフォルト値をそのまま使用して、[ビルドの開始] を選択します。

  15. ビルドが完了したら、[ビルドログ] タブでビルド出力を表示します。次のような出力が表示されます。Go ランタイムおよび Node.js ランタイムからの出力が表示されます。また、Go アプリケーションおよび Node.js アプリケーションからの出力も表示されます。

    [Container] Date Time Processing environment variables [Container] Date Time Selecting 'golang' runtime version '1.13' based on manual selections... [Container] Date Time Selecting 'nodejs' runtime version '12' based on manual selections... [Container] Date Time Running command echo "Installing Go version 1.13 ..." Installing Go version 1.13 ... [Container] Date Time Running command echo "Installing Node.js version 12 ..." Installing Node.js version 12 ... [Container] Date Time Running command n $NODE_12_VERSION installed : v12.20.1 (with npm 6.14.10) [Container] Date Time Moving to directory /codebuild/output/src819694850/src [Container] Date Time Registering with agent [Container] Date Time Phases found in YAML: 2 [Container] Date Time INSTALL: 0 commands [Container] Date Time BUILD: 1 commands [Container] Date Time Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED [Container] Date Time Phase context status code: Message: [Container] Date Time Entering phase INSTALL [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