AWS CodeBuild
ユーザーガイド (API バージョン 2016-10-06)

このガイドの手順では、新しいコンソールデザインがサポートされています。古いバージョンのコンソールを選択すると、古い概念が反映され、本ガイドの基本的な手順がそのまま適用されます。新しいコンソールのヘルプにアクセスするには、情報アイコンを選択します。

AWS CodeBuild の使用開始

このチュートリアルでは、AWS CodeBuild を使用して、サンプルのソースコード入力ファイル (ビルド入力アーティファクトまたはビルド入力と呼ばれる) のコレクションをソースコードのデプロイ可能なバージョン (ビルド出力アーティファクトまたはビルド出力と呼ばれる) に組み込みます。具体的には、一般的なビルドツールである Apache Maven を使用して Java クラスファイルのセットを Java アーカイブ (JAR) ファイルにビルドするように AWS CodeBuild に指示します。このチュートリアルを完了するために、Apache Maven または Java に精通している必要はありません。

重要

このチュートリアルを完了すると、AWS アカウントに料金が発生する可能性があります。これには、AWS CodeBuild および Amazon S3、AWS KMS、CloudWatch Logs に関連する AWS リソースおよびアクションの料金が含まれます。詳細については、「AWS CodeBuild 料金表」、「Amazon S3 料金表」、「AWS Key Management Service 料金表」、「Amazon CloudWatch 料金表」を参照してください。

ステップ 1: Amazon S3 バケットを作成または使用してビルド入力と出力を保存する

このチュートリアルを完了するには、2 つの Amazon S3 バケットが必要です。

  • これらのバケットのいずれかにビルド入力 (入力バケットと呼ばれる) が保存されます。このチュートリアルでは、この入力バケットを codebuild-region-ID-account-ID-input-bucket という名前にします。ここで、region-ID はバケットの AWS リージョン、account-ID は AWS アカウント ID を表します。

  • もうひとつのバケットにはビルド出力 (出力バケットと呼ばれる) が保存されます。このチュートリアルでは、この出力バケットを codebuild-region-ID-account-ID-output-bucket という名前にします。

これらのバケットのいずれかに別の名前を選択した場合は、このチュートリアル全体でその名前を使用してください。

これらの 2 つのバケットは、ビルドと同じ AWS リージョン内にある必要があります。たとえば、ビルドを US East (Ohio) リージョンで実行するよう AWS CodeBuild に指示する場合は、これらのバケットも US East (Ohio) リージョン内にあることが必要です。

バケットを作成するには、Amazon Simple Storage Service ユーザーガイドの「バケットの作成」を参照してください。

注記

このチュートリアル用として 1 つのバケットを使用することもできますが、2 つのバケットを使用すると、ビルド入力の送信元、ビルド出力の送信先を簡単に確認できます。

AWS CodeBuild は、AWS CodeCommit、GitHub、および Bitbucket の各リポジトリに保存されているビルド入力もサポートしますが、このチュートリアルではこれらの使用方法については説明しません。詳細については、「ビルドを計画する」を参照してください。

ステップ 2: ビルドするソースコードを作成する

このステップでは、AWS CodeBuild が出力バケットにビルドするソースコードを作成します。このソースコードは 2 つの Java クラスファイルと Apache Maven プロジェクトオブジェクトモデル (POM) ファイルで構成されています。

  1. ローカルコンピュータまたはインスタンスの空のディレクトリに、このディレクトリ構造を作成します。

    (root directory name) `-- src |-- main | `-- java `-- test `-- java
  2. 任意のテキストエディタを使用して、このファイルを作成し、MessageUtil.java という名前を付けて、src/main/java ディレクトリに保存します。

    public class MessageUtil { private String message; public MessageUtil(String message) { this.message = message; } public String printMessage() { System.out.println(message); return message; } public String salutationMessage() { message = "Hi!" + message; System.out.println(message); return message; } }

    このクラスファイルは、渡された文字列を出力として作成します。MessageUtil コンストラクタは、文字列を設定します。printMessage メソッドは出力を作成します。salutationMessage メソッドが Hi! を出力した後に文字列が続きます。

  3. このファイルを作成し、TestMessageUtil.java という名前を付けて、/src/test/java ディレクトリに保存します。

    import org.junit.Test; import org.junit.Ignore; import static org.junit.Assert.assertEquals; public class TestMessageUtil { String message = "Robert"; MessageUtil messageUtil = new MessageUtil(message); @Test public void testPrintMessage() { System.out.println("Inside testPrintMessage()"); assertEquals(message,messageUtil.printMessage()); } @Test public void testSalutationMessage() { System.out.println("Inside testSalutationMessage()"); message = "Hi!" + "Robert"; assertEquals(message,messageUtil.salutationMessage()); } }

    このクラスファイルは MessageUtil クラスの message 変数を Robert に設定します。その後、文字列 Robert および Hi!Robert が出力に表示されているかどうかを調べることによって、message 変数が正常に設定されたかどうかを調べます。

  4. このファイルを作成し、pom.xml という名前を付けて、ルート (最上位) ディレクトリに保存します。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>messageUtil</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>Message Utility Java Sample App</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> </project>

    Apache Maven では、このファイルの指示に従って、MessageUtil.java および TestMessageUtil.java ファイルを messageUtil-1.0.jar という名前のファイルに変換し、指定されたテストを実行します。

この時点で、ディレクトリ構造は次のようになります。

(root directory name) |-- pom.xml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java

ステップ 3: ビルド仕様を作成する

このステップでは、ビルド仕様ファイルを作成します。ビルド仕様は、AWS CodeBuild がビルドを実行するために使用する YAML 形式のビルドコマンドと関連設定のコレクションです。 AWS CodeBuild では、ビルド仕様がないと、ビルド入力をビルド出力に正常に変換できません。また、ビルド環境でビルド出力アーティファクトを特定して出力バケットにアップロードすることもできません。

このファイルを作成し、buildspec.yml という名前を付けて、ルート (最上位) ディレクトリに保存します。

version: 0.2 phases: install: commands: - echo Nothing to do in the install phase... pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - mvn install post_build: commands: - echo Build completed on `date` artifacts: files: - target/messageUtil-1.0.jar

重要

ビルド仕様宣言は有効な YAML である必要があるため、ビルド仕様宣言のスペースは重要です。ビルド仕様宣言のスペース数が YAML と一致しない場合、ビルドは即座に失敗する場合があります。YAML validator を使用して、ビルド仕様宣言が有効な YAML かどうかをテストできます。

注記

ソースコードにビルド仕様ファイルを含める代わりに、ビルドプロジェクトを作成するときに個別にビルドコマンドを宣言することができます。これは、毎回ソースコードのリポジトリを更新せずに、異なるビルドコマンドでソースコードをビルドする場合に役立ちます。詳細については、「ビルド仕様の構文」を参照してください。

このビルド仕様宣言では。

  • version は、使用されているビルド仕様スタンダードのバージョンを表します。このビルド仕様宣言では、最新バージョン 0.2 が使用されます。

  • phases は、AWS CodeBuild にコマンドの実行を指示するビルドフェーズを表します。これらのビルドフェーズは installpre_buildbuildpost_build として、ここにリストされています。これらのビルドフェーズ名のスペルを変更することはできず、追加のビルドフェーズ名を作成することもできません。

    この例では、build フェーズ中に、AWS CodeBuild が mvn install コマンドを実行します。このコマンドは、コンパイルされた Java クラスファイルをビルド出力アーティファクトにコンパイル、テスト、パッケージ化するように Apache Maven に指示します。完全にするために、この例では、いくつかの echo コマンドが各ビルドフェーズに配置されています。このチュートリアルの後半で詳細なビルド情報を表示すると、これらの echo コマンドの出力は、AWS CodeBuild がコマンドを実行する方法とその順序を理解するのに役立ちます。(この例にはすべてのビルドフェーズが含まれていますが、コマンドを実行しないビルドフェーズは含める必要がありません)。 各ビルドフェーズについて、AWS CodeBuild は最初から最後まで、各コマンドを一度に 1 つずつ、指定された順序で実行します。

  • artifacts は、AWS CodeBuild が出力バケットにアップロードする一連のビルド出力アーティファクトを表します。files は、ビルド出力に含めるファイルを表します。AWS CodeBuild は、ビルド環境の target 相対ディレクトリにある、単一の messageUtil-1.0.jar ファイルをアップロードします。ファイル名 messageUtil-1.0.jar およびディレクトリ名 target は、この例でのみ Apache Maven がビルド出力アーティファクトを作成して格納する方法に基づいています。独自のビルドでは、これらのファイル名とディレクトリは異なります。

詳細については、『ビルドスペックリファレンス』を参照してください。

この時点で、ディレクトリ構造は次のようになります。

(root directory name) |-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java

ステップ 4: ソースコードとビルド仕様を入力バケットに追加する

このステップでは、入力バケットにソースコードとビルド仕様ファイルを追加します。

オペレーティングシステムの zip ユーティリティを使用して、MessageUtil.javaTestMessageUtil.javapom.xml、および buildspec.yml を含む MessageUtil.zip という名前のファイルを作成します。

MessageUtil.zip ファイルのディレクトリ構造は、次のようになっている必要があります。

MessageUtil.zip |-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java

重要

(root directory name) ディレクトリを含めないでください。(root directory name) ディレクトリ内のディレクトリとファイルのみを含めます。

MessageUtil.zip ファイルを codebuild-region-ID-account-ID-input-bucket という名前の入力バケットにアップロードします。

重要

AWS CodeCommit、GitHub、および Bitbucket の各リポジトリでは、規約に従って、buildspec.yml というビルド仕様ファイルを各リポジトリのルート (最上位) に保存するか、ビルド仕様宣言をビルドプロジェクト定義の一部として含める必要があります。リポジトリのソースコードとビルド仕様ファイルを含む ZIP ファイルを作成しないでください。

Amazon S3 バケットに保存されたビルド入力に限り、ソースコードおよび規約に基づく buildspec.yml というビルド仕様ファイルを圧縮した ZIP ファイルをルート (最上位) に作成するか、ビルド仕様宣言をビルドプロジェクト定義の一部として含める必要があります。

ビルド仕様ファイルに別の名前を使用するか、ルート以外の場所でビルド仕様を参照する場合は、ビルドプロジェクト定義の一部としてビルド仕様の上書きを指定できます。詳細については、「ビルド仕様のファイル名とストレージの場所」を参照してください。

ステップ 5: ビルドプロジェクトを作成する

このステップでは、AWS CodeBuild がビルドの実行に使用するビルドプロジェクトを作成します。ビルドプロジェクトは、AWS CodeBuild がビルドを実行する方法を定義します。これには、ソースコード、使用するビルド環境、実行するビルドの入手先、ビルド出力の保存先などの情報が含まれます。 ビルド環境は、ビルドを実行するために AWS CodeBuild が使用するオペレーティングシステム、プログラミング言語ランタイム、およびツールの組み合わせを表します。 ビルド環境は Docker イメージとして表されます。(詳細については、Docker Docs ウェブサイトの「Docker Overview」を参照してください。) このビルド環境では、AWS CodeBuild に、Java 開発キット (JDK) のバージョンおよび Apache Maven が含まれる Docker イメージを使用するように指示します。

このステップを完了するには、AWS CodeBuild コンソール、または AWS CLI を使用します。

注記

AWS CodeBuild は、AWS CodeBuild コンソール、AWS CodePipeline、AWS CLI、または AWS SDK を通じて、いくつかの方法で操作できます。このチュートリアルでは、AWS CodeBuild コンソールと AWS CLI を使用する方法を示しています。AWS CodePipeline を使用する方法については、「AWS CodeBuild で AWS CodePipeline を使用する」を参照してください。AWS SDK の使用方法については、「AWS CodeBuild を直接実行する」を参照してください。

ビルドプロジェクトを作成するには (コンソール)

  1. AWS リージョンセレクタで、AWS CodeBuild をサポートするリージョンを選択します。詳細については、Amazon Web Services General Reference の「リージョンとエンドポイント」トピックにある「AWS CodeBuild」を参照してください。

  2. [Create build project (ビルドプロジェクトの作成)] ページで、[Project configuration (プロジェクト設定)] の [プロジェクト名] にこのビルドプロジェクトの名前を入力します (この例では、codebuild-demo-project)。ビルドプロジェクトの名前は、各 AWS アカウントで一意である必要があります。別の名前を選択した場合は、このチュートリアル全体でそれを使用してください。

    注記

    [Create build project (ビルドプロジェクトの作成)] ページで、次のようなエラーメッセージが表示されることがあります。「ユーザー: user-ARN は次のことを実行する権限がありません。codebuild:ListProjects」これは、多くの場合、コンソールで AWS Management Console を使用するための十分な権限を持たない IAM ユーザーとして AWS CodeBuild にサインインしたためです。これを修正するには、AWS Management Console からサインアウトし、次の IAM エンティティのいずれかに属する認証情報でサインインし直します。

    • AWS ルートアカウント。これは推奨されません。詳細については、IAM ユーザーガイドの「アカウントのルートユーザー」を参照してください。

    • AWS アカウントの管理者 IAM ユーザー。詳細については、IAM ユーザーガイドの「最初の IAM 管理者ユーザーおよびグループの作成」を参照してください。

    • AWSCodeBuildAdminAccessAmazonS3ReadOnlyAccessIAMFullAccess という名前の AWS 管理ポリシーが IAM ユーザーまたは IAM ユーザーが属する IAM グループにアタッチされている AWS アカウントの IAM ユーザー。これらのアクセス許可を持つ IAM ユーザーやグループが AWS アカウントに存在せず、これらのアクセス許可を IAM ユーザーやグループに追加できない場合は、AWS アカウント管理者にお問い合わせください。詳細については、「AWS CodeBuild での AWS 管理 (事前定義) ポリシー」を参照してください。

  3. [ソース] で、[ソースプロバイダ] として [Amazon S3] を選択します。

  4. [Bucket (バケット)] で、[codebuild-region-ID-account-ID-input-bucket] を選択します。

  5. [S3 オブジェクトキー] に「MessageUtil.zip」と入力します。

  6. [環境] の [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択したままにしておきます。

  7. [Operating system] で、[Ubuntu] を選択します。

  8. [Runtime] で、[Java] を選択します。

  9. [ランタイムバージョン] で、aws/codebuild/java:openjdk-8 を選択します。

  10. [サービスロール] で、[New service role (新しいサービスロール)] は選択したままにして、[Role name (ロール名)] は変更しません。

  11. [Buildspec] で、[buildspec.yml] を選択したままにしておきます。

  12. [アーティファクト] の [タイプ] で、[Amazon S3] を選択します。

  13. ​[名前] と [パス] を空白のままにします。

  14. [バケット名] で、[codebuild-region-ID-account-ID-output-bucket] を選択します。

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

    [ステップ 6: ビルドを実行する] に進んでください。

ビルドプロジェクト (AWS CLI) を作成するには

  1. AWS CLI を使用して create-project コマンドを実行します。

    aws codebuild create-project --generate-cli-skeleton

    JSON 形式のデータが出力に表示されます。AWS CLI がインストールされているローカルコンピュータまたはインスタンス上の場所にある create-project.json というファイルにデータをコピーします。別のファイル名を使用する場合は、このチュートリアル全体でそのファイル名を使用してください。

    コピーされたデータをこの形式に従って変更して、結果を保存します。

    { "name": "codebuild-demo-project", "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip" }, "artifacts": { "type": "S3", "location": "codebuild-region-ID-account-ID-output-bucket" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/java:openjdk-8", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "serviceIAMRole" }

    serviceIAMRole を、AWS CodeBuild サービスロールの Amazon リソースネーム (ARN) (例: arn:aws:iam::account-ID:role/role-name) に置き換えます。サービスロールを作成する場合は、「AWS CodeBuild サービスロールの作成」を参照してください。

    このデータの各要素は以下のとおりです。

    • name は、このビルドプロジェクト (この例では codebuild-demo-project) に必要な識別子を表します。ビルドプロジェクト名は、アカウント内のすべてのビルドプロジェクト間で一意である必要があります。

    • source の場合、type はソースコードのリポジトリのタイプを表す必須の値です (この例では、Amazon S3 バケットの場合は S3)。

    • source の場合、location は、ソースコードへのパスを表します (この例では、入力バケット名の後に ZIP ファイル名が続きます)。

    • artifacts の場合、type は、ビルド出力アーティファクトのリポジトリのタイプを表す必須の値です (この例では、Amazon S3 バケットの場合は S3)。

    • artifacts の場合、location は、以前に作成または識別した出力バケットの名前を表します (この例では、codebuild-region-ID-account-ID-output-bucket)。

    • environment の場合、type はビルド環境のタイプを表す必須の値です (現在許容されている値は LINUX_CONTAINER のみです)。

    • environment の場合、image は、Docker イメージリポジトリタイプで指定された、このビルドプロジェクトが使用する Docker イメージ名とタグの組み合わせを表す必須の値です (この例では、AWS CodeBuild Docker イメージリポジトリ内の Docker イメージの場合は aws/codebuild/java:openjdk-8)。aws/codebuild/java は、Docker イメージの名前です。openjdk-8 は、Docker イメージのタグです。

      シナリオで使用できる Docker イメージをさらに見つけるには、「ビルド環境リファレンス」を参照してください。

    • environment の場合、computeType は、AWS CodeBuild が使用するコンピューティングリソース (この例では BUILD_GENERAL1_SMALL) を表す必須の値です。

    注記

    descriptionbuildspecauth (typeresource を含む)、pathnamespaceTypename (artifacts)、packagingenvironmentVariables (namevalue を含む)、timeoutInMinutesencryptionKeytags (keyvalue を含む) などの元の JSON 形式のデータで使用可能なその他の値はオプションです。これらは、このチュートリアルで使用されていないため、ここには表示されません。詳細については、ビルドプロジェクトを作成する (AWS CLI) を参照してください。

  2. 保存したばかりのファイルがあるディレクトリに移動してから、create-project コマンドをもう一度実行します。

    aws codebuild create-project --cli-input-json file://create-project.json

    成功した場合、次のようなデータが出力に表示されます。

    { "project": { "name": "codebuild-demo-project", "serviceRole": "serviceIAMRole", "tags": [], "artifacts": { "packaging": "NONE", "type": "S3", "location": "codebuild-region-ID-account-ID-output-bucket", "name": "message-util.zip" }, "lastModified": 1472661575.244, "timeoutInMinutes": 60, "created": 1472661575.244, "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/java:openjdk-8", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip" }, "encryptionKey": "arn:aws:kms:region-ID:account-ID:alias/aws/s3", "arn": "arn:aws:codebuild:region-ID:account-ID:project/codebuild-demo-project" } }
    • project は、このビルドプロジェクトに関する情報を表します。

      • tags は、宣言されたタグを表します。

      • packaging は、ビルド出力アーティファクトが出力バケットに保存される方法を表します。NONE は、出力バケット内にフォルダが作成されることを意味します。ビルド出力アーティファクトはそのフォルダ内に格納されます。

      • lastModified は、ビルドプロジェクトに関する情報が最後に変更された時刻 (Unix の時間形式) を表します。

      • timeoutInMinutes は、ビルドが完了していない場合、AWS CodeBuild がビルドを停止するまでの時間 (分) を表します。(デフォルトは 60 分です。)

      • created は、ビルドプロジェクトが作成された時刻 (Unix の時間形式) を表します。

      • environmentVariables は、AWS CodeBuild がビルド中に使用するために宣言されて、使用可能な環境変数を表します。

      • encryptionKey は、AWS CodeBuild がビルド出力アーティファクトの暗号化に使用した AWS KMS カスタマーマスターキー (CMK) の ARN を表します。

      • arn は、ビルドプロジェクトの ARN を表します。

注記

create-project コマンドの実行後に、次のようなメッセージが出力される場合があります。「ユーザー: user-ARN は次のことを実行する権限がありません。codebuild:CreateProject」これは、多くの場合、ビルドプロジェクトの作成に AWS CodeBuild を使用するための十分な権限を持たない IAM ユーザーの認証情報で AWS CLI を設定したためです。これを修正するには、次の IAM エンティティのいずれかに属する認証情報を使用して AWS CLI を設定します。

  • AWS ルートアカウント。これは推奨されません。詳細については、IAM ユーザーガイドの「アカウントのルートユーザー」を参照してください。

  • AWS アカウントの管理者 IAM ユーザー。詳細については、IAM ユーザーガイドの「最初の IAM 管理者ユーザーおよびグループの作成」を参照してください。

  • AWSCodeBuildAdminAccessAmazonS3ReadOnlyAccessIAMFullAccess という名前の AWS 管理ポリシーが IAM ユーザーまたは IAM ユーザーが属する IAM グループにアタッチされている AWS アカウントの IAM ユーザー。これらのアクセス許可を持つ IAM ユーザーやグループが AWS アカウントに存在せず、これらのアクセス許可を IAM ユーザーやグループに追加できない場合は、AWS アカウント管理者にお問い合わせください。詳細については、「AWS CodeBuild での AWS 管理 (事前定義) ポリシー」を参照してください。

ステップ 6: ビルドを実行する

このステップでは、ビルドプロジェクトの設定でビルドを実行するように AWS CodeBuild に指示します。

このステップを完了するには、AWS CodeBuild コンソール、または AWS CLI を使用します。

ビルドを実行するには (コンソール)

  1. ナビゲーションペインで、[Build projects] を選択します。

  2. ビルドプロジェクトのリストで、[codebuild-demo-project]、[ビルドの開始] の順に選択します。

  3. [Start new build] ページで、[Start build] を選択します。

  4. [ステップ 7: 要約されたビルド情報を表示する] に進んでください。

ビルドを実行するには (AWS CLI)

  1. AWS CLI を使用して start-build コマンドを実行します。

    aws codebuild start-build --project-name project-name

    project-name を、前の手順のビルドプロジェクト名 (例: codebuild-demo-project) に置き換えます。

  2. 成功すると、次のようなデータが出力に表示されます。

    { "build": { "buildComplete": false, "initiator": "user-name", "artifacts": { "location": "arn:aws:s3:::codebuild-region-ID-account-ID-output-bucket/message-util.zip" }, "projectName": "codebuild-demo-project", "timeoutInMinutes": 60, "buildStatus": "IN_PROGRESS", "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/java:openjdk-8", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip" }, "currentPhase": "SUBMITTED", "startTime": 1472848787.882, "id": "codebuild-demo-project:0cfbb6ec-3db9-4e8c-992b-1ab28EXAMPLE", "arn": "arn:aws:codebuild:region-ID:account-ID:build/codebuild-demo-project:0cfbb6ec-3db9-4e8c-992b-1ab28EXAMPLE" } }
    • build は、このビルドに関する情報を表します。

      • buildComplete は、ビルドの完了 (true) または未完了 (false) を表します。

      • initiator は、ビルドを開始したエンティティを表します。

      • artifacts は、場所を含む、ビルド出力に関する情報を表します。

      • projectName は、ビルドプロジェクトの名前を表します。

      • buildStatus は、start-build コマンドが実行されたときの現在のビルドのステータスを表します。

      • currentPhase は、start-build コマンドが実行されたときの現在のビルドフェーズを表します。

      • startTime は、ビルドプロセスが開始された時刻 (Unix の時間形式) を表します。

      • id は、ビルドの ID を表します。

      • arn は、ビルドの ARN を表します。

    [id] の値を書き留めておきます。これは次の手順で必要です。

ステップ 7: 要約されたビルド情報を表示する

このステップでは、ビルドのステータスに関する要約情報を表示します。

このステップを完了するには、AWS CodeBuild コンソール、または AWS CLI を使用します。

要約されたビルド情報を表示するには (コンソール)

  1. [codebuild-demo-project:build-ID] ページが表示されない場合は、ナビゲーションバーで [ビルド履歴] を選択します。次にビルドプロジェクトのリストで、[プロジェクト] の [codebuild-demo-project] の [ビルドの実行] リンクを選択します。一致するリンクは 1 つだけです。(このチュートリアルを以前に完了している場合は、[Completed] 列のリンクを選択して、最新値を確認してください。)

  2. ビルドの詳細ページの [Phase details] に、以下のビルドフェーズのリストが表示され、[Status] 列に [Succeeded] と表示されます。

    • SUBMITTED

    • PROVISIONING

    • DOWNLOAD_SOURCE

    • INSTALL

    • PRE_BUILD

    • BUILD

    • POST_BUILD

    • UPLOAD_ARTIFACTS

    • FINALIZING

    • COMPLETED

    [ビルドステータス] で、[Succeeded (成功)] が表示されます。

    代わりに [In Progress (進行中)] と表示された場合は、更新ボタンを選択して最新の進行状況を確認します。

  3. 各ビルドフェーズの横にある [Duration] 値は、ビルドフェーズの所要時間を示します。[終了時間] 値は、ビルドフェーズの完了日時を示します。

    [ステップ 8: 詳細なビルド情報を表示する] に進んでください。

要約されたビルド情報を表示するには (AWS CLI)

AWS CLI を使用して batch-get-builds コマンドを実行します。

aws codebuild batch-get-builds --ids id

id を、前のステップの出力に表示された id 値に置き換えます。

成功した場合、次のようなデータが出力に表示されます。

{ "buildsNotFound": [], "builds": [ { "buildComplete": true, "phases": [ { "phaseStatus": "SUCCEEDED", "endTime": 1472848788.525, "phaseType": "SUBMITTED", "durationInSeconds": 0, "startTime": 1472848787.882 }, ... The full list of build phases has been omitted for brevity ... { "phaseType": "COMPLETED", "startTime": 1472848878.079 } ], "logs": { "groupName": "/aws/codebuild/codebuild-demo-project", "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=region-ID#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE", "streamName": "38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE" }, "artifacts": { "md5sum": "MD5-hash", "location": "arn:aws:s3:::codebuild-region-ID-account-ID-output-bucket/message-util.zip", "sha256sum": "SHA-256-hash" }, "projectName": "codebuild-demo-project", "timeoutInMinutes": 60, "initiator": "user-name", "buildStatus": "SUCCEEDED", "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/java:openjdk-8", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/MessageUtil.zip" }, "currentPhase": "COMPLETED", "startTime": 1472848787.882, "endTime": 1472848878.079, "id": "codebuild-demo-project:38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE", "arn": "arn:aws:codebuild:region-ID:account-ID:build/codebuild-demo-project:38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE" } ] }
  • buildsNotFound は、情報が利用できないビルドのビルド ID を表します。この例では、空である必要があります。

  • builds は、利用可能な各ビルドに関する情報を表します。この例では、出力に 1 つのビルドのみに関する情報が表示されます。

    • phases は、AWS CodeBuild がビルドプロセス中に実行する一連のビルドフェーズを表します。各ビルドフェーズに関する情報が startTimeendTimedurationInSeconds (フェーズの開始時と終了時、Unix 時間形式で表示、持続時間 (秒))、phaseType (SUBMITTEDPROVISIONINGDOWNLOAD_SOURCEINSTALLPRE_BUILDBUILDPOST_BUILDUPLOAD_ARTIFACTSFINALIZINGCOMPLETED など)、phaseStatus (SUCCEEDEDFAILEDFAULTTIMED_OUTIN_PROGRESSSTOPPED など) として個別にリストされます。batch-get-builds コマンドを初めて実行するときは、多くの (またはまったく) フェーズが存在しない可能性があります。同じビルド ID を持つ batch-get-builds コマンドを続けて実行すると、より多くのビルドフェーズが出力に表示されます。

    • logs は、Amazon CloudWatch Logs のビルドのログに関する情報を表します。

    • md5sum および sha256sum は、ビルドの出力アーティファクトの MD5 と SHA-256 ハッシュを表します。これらは、関連するビルドプロジェクトの packaging 値が ZIP に設定されている場合にのみ出力に表示されます。(このチュートリアルでは設定していません。) これらのハッシュとチェックサムツールを使用して、ファイルの完全性と信頼性を確認することができます。

      注記

      Amazon S3 コンソールを使用して、これらのハッシュを表示することもできます。ビルド出力アーティファクトの横にあるボックスを選択し、[Actions]、[Properties] の順に選択します。[Properties] ペインで [Metadata] を展開し、[x-amz-meta-codebuild-content-md5] と [x-amz-meta-codebuild-content-sha256] の値を確認します。(Amazon S3 コンソールでは、ビルド出力アーティファクトの [ETag] 値を MD5 または SHA-256 ハッシュのいずれかに解釈することはできません。)

      AWS SDK を使用して、これらのハッシュを取得する場合、値の名前は codebuild-content-md5 および codebuild-content-sha256 です。

    • endTime は、ビルドプロセスが終了した時刻 (Unix の時間形式) を表します。

ステップ 8: 詳細なビルド情報を表示する

このステップでは、CloudWatch Logs のビルドに関する詳細情報を表示します。

このステップを完了するには、AWS CodeBuild コンソール、または AWS CLI を使用します。

詳細なビルド情報を表示するには (コンソール)

  1. ビルドの詳細ページが前のステップから引き続き表示された状態で、ビルドログの最後の 10,000 行が [Build logs] に表示されます。CloudWatch Logs でビルドログ全体を表示するには、[ログ全体の表示] リンクを選択します。

  2. CloudWatch Logs ログストリームでは、ログイベントを参照できます。デフォルトでは、ログイベントの最後のセットだけが表示されます。以前のログイベントを表示するには、リストの先頭にスクロールします。

  3. このチュートリアルでは、ほとんどのログイベントに、AWS CodeBuild でビルド環境にダウンロードしてインストールするビルド依存ファイルの詳細情報が含まれますが、これらの情報は不要な場合があります。[Filter events] ボックスを使用すると、表示する情報量を減らすことができます。たとえば、[イベントのフィルタ] ボックスに「"[INFO]"」と入力すると、[INFO] を含むイベントのみ表示されます。詳細については、Amazon CloudWatch User Guide の「フィルタとパターンの構文」を参照してください。

[ステップ 9: ビルド出力アーティファクトを取得する] に進んでください。

詳細なビルド情報を表示するには (AWS CLI)

  1. ウェブブラウザを使用して、前の手順の出力に表示された deepLink の場所に移動します (例: https://console.aws.amazon.com/cloudwatch/home?region=region-ID#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE)。

  2. CloudWatch Logs ログストリームでは、ログイベントを参照できます。デフォルトでは、ログイベントの最後のセットだけが表示されます。以前のログイベントを表示するには、リストの先頭にスクロールします。

  3. このチュートリアルでは、ほとんどのログイベントに、AWS CodeBuild でビルド環境にダウンロードしてインストールするビルド依存ファイルの詳細情報が含まれますが、これらの情報は不要な場合があります。[Filter events] ボックスを使用すると、表示する情報量を減らすことができます。たとえば、[イベントのフィルタ] ボックスに「"[INFO]"」と入力すると、[INFO] を含むイベントのみ表示されます。詳細については、Amazon CloudWatch User Guide の「フィルタとパターンの構文」を参照してください。

CloudWatch Logs のログストリームの以下の部分は、このチュートリアルに関係します。

... [Container] 2016/04/15 17:49:42 Entering phase PRE_BUILD [Container] 2016/04/15 17:49:42 Running command echo Entering pre_build phase... [Container] 2016/04/15 17:49:42 Entering pre_build phase... [Container] 2016/04/15 17:49:42 Phase complete: PRE_BUILD Success: true [Container] 2016/04/15 17:49:42 Entering phase BUILD [Container] 2016/04/15 17:49:42 Running command echo Entering build phase... [Container] 2016/04/15 17:49:42 Entering build phase... [Container] 2016/04/15 17:49:42 Running command mvn install [Container] 2016/04/15 17:49:44 [INFO] Scanning for projects... [Container] 2016/04/15 17:49:44 [INFO] [Container] 2016/04/15 17:49:44 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:44 [INFO] Building Message Utility Java Sample App 1.0 [Container] 2016/04/15 17:49:44 [INFO] ------------------------------------------------------------------------ ... [Container] 2016/04/15 17:49:55 ------------------------------------------------------- [Container] 2016/04/15 17:49:55 T E S T S [Container] 2016/04/15 17:49:55 ------------------------------------------------------- [Container] 2016/04/15 17:49:55 Running TestMessageUtil [Container] 2016/04/15 17:49:55 Inside testSalutationMessage() [Container] 2016/04/15 17:49:55 Hi!Robert [Container] 2016/04/15 17:49:55 Inside testPrintMessage() [Container] 2016/04/15 17:49:55 Robert [Container] 2016/04/15 17:49:55 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 sec [Container] 2016/04/15 17:49:55 [Container] 2016/04/15 17:49:55 Results : [Container] 2016/04/15 17:49:55 [Container] 2016/04/15 17:49:55 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 ... [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 [INFO] BUILD SUCCESS [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 [INFO] Total time: 11.845 s [Container] 2016/04/15 17:49:56 [INFO] Finished at: 2016-04-15T17:49:56+00:00 [Container] 2016/04/15 17:49:56 [INFO] Final Memory: 18M/216M [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 Phase complete: BUILD Success: true [Container] 2016/04/15 17:49:56 Entering phase POST_BUILD [Container] 2016/04/15 17:49:56 Running command echo Entering post_build phase... [Container] 2016/04/15 17:49:56 Entering post_build phase... [Container] 2016/04/15 17:49:56 Phase complete: POST_BUILD Success: true [Container] 2016/04/15 17:49:57 Preparing to copy artifacts [Container] 2016/04/15 17:49:57 Assembling file list [Container] 2016/04/15 17:49:57 Expanding target/messageUtil-1.0.jar [Container] 2016/04/15 17:49:57 Found target/messageUtil-1.0.jar [Container] 2016/04/15 17:49:57 Creating zip artifact

この例では、AWS CodeBuild はビルド前、ビルド、およびビルド後のビルドフェーズを正常に完了しました。ユニットテストを実行し、messageUtil-1.0.jar ファイルは正常に構築されました。

ステップ 9: ビルド出力アーティファクトを取得する

このステップでは、AWS CodeBuild が構築して出力バケットにアップロードした messageUtil-1.0.jar ファイルを取得します。

このステップを完了するには、AWS CodeBuild コンソール、または Amazon S3 コンソールを使用します。

ビルド出力アーティファクトを取得するには (AWS CodeBuild コンソール)

  1. AWS CodeBuild コンソールが開いていて、ビルドの詳細ページが前のステップから引き続き表示されている状態で、[ビルドステータス] から [View artifacts (アーティファクトの表示)] リンクを選択します。これにより、ビルド出力アーティファクトのフォルダが Amazon S3 で開きます。(ビルドの詳細ページが表示されていない場合は、ナビゲーションバーで [Build history] を選択し、次に [Build run] リンクを選択します。)

  2. target という名前のフォルダを開き、messageUtil-1.0.jar という名前のビルド出力アーティファクトを見つけます。

    [ステップ 10: クリーンアップ] に進んでください。

ビルド出力アーティファクトを取得するには (Amazon S3 コンソール)

  1. Open the Amazon S3 console at https://console.aws.amazon.com/s3/.

  2. codebuild-region-ID-account-ID-output-bucket という名前のバケットを開きます。

  3. codebuild-demo-project という名前のフォルダを開きます。

  4. target という名前のフォルダを開き、messageUtil-1.0.jar という名前のビルド出力アーティファクトを見つけます。

ステップ 10: クリーンアップ

AWS アカウントで継続的に料金が発生するのを防ぐために、このチュートリアルで使用されている入力バケットを削除できます。手順については、Amazon Simple Storage Service Developer Guide の「バケットを削除する、または空にする」を参照してください。

AWS ルートアカウントまたは管理者 IAM ユーザーではなく IAM ユーザーを使用してこのバケットを削除する場合は、追加のアクセス許可が必要です。(AWS ルートアカウントを使用することは推奨されません。) マーカー間で次のステートメント (###BEGIN ADDING STATEMENT HERE######END ADDING STATEMENTS HERE###) を既存のアクセスポリシーに追加します。省略記号 (...) は、簡潔にするために使用されます。既存のアクセスポリシーのステートメントは削除しないでください。これらの省略記号はポリシーに入力しないでください。

{ "Version": "2012-10-17", "Id": "...", "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Effect": "Allow", "Action": [ "s3:DeleteBucket", "s3:DeleteObject" ], "Resource": "*" } ### END ADDING STATEMENT HERE ### ] }

次のステップ

このチュートリアルでは、AWS CodeBuild を使用して、一連の Java クラスファイルを JAR ファイルに構築しました。次に、ビルドの結果を表示しました。

今後は ビルドを計画する の手順に従って独自のシナリオで AWS CodeBuild を使用できます。もう少し準備が必要な場合は、用意されているサンプルでビルドを試すことができます。詳細については、「サンプル」を参照してください。