CodeBuild の開始方法
次のチュートリアルでは、AWS CodeBuild を使用し、サンプルソースコード入力ファイルのコレクションから、ソースコードのデプロイ可能バージョンを生成します。
どちらのチュートリアルでも入力と結果は同じですが、一方では AWS CodeBuild コンソールを使用し、他方では AWS CLI を使用します。
重要
このチュートリアルを完了するために AWS ルートアカウントは使用しないでください。
コンソールを使用した AWS CodeBuild の開始方法
このチュートリアルでは、AWS CodeBuild を使用して、サンプルのソースコード入力ファイル(ビルド入力アーティファクトまたはビルド入力)のコレクションから、ソースコードのデプロイ可能バージョン(ビルド出力アーティファクトまたはビルド出力)を生成します。具体的には、一般的なビルドツールである Apache Maven を使用して Java クラスファイルのセットを Java アーカイブ (JAR) ファイルにビルドするように CodeBuild に指示します。このチュートリアルを完了するために、Apache Maven または Java に精通している必要はありません。
CodeBuild は、CodeBuild コンソール、AWS CodePipeline、AWS CLI、または AWS SDK を使用して作業できます。このチュートリアルでは、CodeBuild コンソールを使用する方法を示します。CodePipeline の使用については、「CodePipeline で CodeBuild を使用」を参照してください。
重要
このチュートリアルのステップでは、AWS アカウントに課金される可能性のあるリソース(S3 バケットなど)を作成する必要があります。これには、CodeBuild の料金、および Amazon S3、AWS KMS、CloudWatch Logs に関連する AWS リソースとアクションの料金が含まれます。詳細については、AWS CodeBuild 料金表
トピック
ステップ 1: ソースコードを作成する
(一部: コンソールを使用した AWS CodeBuild の開始方法)
このステップでは、CodeBuild が出力バケットにビルドするソースコードを作成します。このソースコードは 2 つの Java クラスファイルと Apache Maven プロジェクトオブジェクトモデル (POM) ファイルで構成されています。
-
ローカルコンピュータまたはインスタンスの空のディレクトリに、このディレクトリ構造を作成します。
(root directory name)
`-- src |-- main | `-- java `-- test `-- java -
任意のテキストエディタを使用して、このファイルを作成し、
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!
を出力した後に文字列が続きます。 -
このファイルを作成し、
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()); } }
このクラスファイルは
message
クラスのMessageUtil
変数をRobert
に設定します。その後、文字列message
およびRobert
が出力に表示されているかどうかを調べることによって、Hi!Robert
変数が正常に設定されたかどうかを調べます。 -
このファイルを作成し、
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> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> </plugins> </build> </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
ステップ 2: buildspec ファイルを作成する
(前のステップ: ステップ 1: ソースコードを作成する)
このステップでは、ビルド仕様ファイルを作成します。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステム、プログラミング言語ランタイム、およびツールの組み合わせを表します。CodeBuild では、ビルド仕様がないと、ビルド入力をビルド出力に正常に変換できません。また、ビルド環境でビルド出力アーティファクトを特定して出力バケットにアップロードすることもできません。
このファイルを作成し、buildspec.yml
という名前を付けて、ルート (最上位) ディレクトリに保存します。
version: 0.2 phases: install: runtime-versions: java: corretto11 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 かどうかをテストできます。
注記
ソースコードにビルド仕様ファイルを含める代わりに、ビルドプロジェクトを作成するときに個別にビルドコマンドを宣言することができます。これは、毎回ソースコードのリポジトリを更新せずに、異なるビルドコマンドでソースコードをビルドする場合に役立ちます。詳細については、「buildspec の構文」を参照してください。
このビルド仕様宣言の詳細は次の通りです。
-
version
は、使用されているビルド仕様スタンダードのバージョンを表します。このビルド仕様宣言では、最新バージョン0.2
が使用されます。 -
phases
は、CodeBuild にコマンドの実行を指示するビルドフェーズを表します。これらのビルドフェーズはinstall
、pre_build
、build
、post_build
として、ここにリストされています。これらのビルドフェーズ名のスペルを変更することはできず、追加のビルドフェーズ名を作成することもできません。この例では、
build
フェーズ中に、 CodeBuild によってmvn install
コマンドが実行されます。このコマンドは、コンパイルされた Java クラスファイルをビルド出力アーティファクトにコンパイル、テスト、パッケージ化するように Apache Maven に指示します。完全にするために、この例では、いくつかのecho
コマンドが各ビルドフェーズに配置されています。このチュートリアルの後半で詳細なビルド情報を見る際に、これらのecho
コマンドの出力は、CodeBuild がコマンドを実行する方法とその順序を理解するのに役立ちます。(この例にはすべてのビルドフェーズが含まれていますが、コマンドを実行しないビルドフェーズは含める必要がありません)。各ビルドフェーズについて、CodeBuild は最初から最後まで、各コマンドを一度に 1 つずつ、指定された順序で実行します。 -
「
artifacts
」は、CodeBuild が出力バケットにアップロードする一連のビルド出力アーティファクトを表します。「files
」は、ビルド出力に含めるファイルを表します。CodeBuild は、ビルド環境の「messageUtil-1.0.jar
」相対ディレクトリにある、単一の「target
」ファイルをアップロードします。ファイル名messageUtil-1.0.jar
およびディレクトリ名target
は、この例でのみ Apache Maven がビルド出力アーティファクトを作成して格納する方法に基づいています。独自のビルドでは、これらのファイル名とディレクトリは異なります。
詳細については、「ビルド仕様 (buildspec) に関するリファレンス」を参照してください。
この時点で、ディレクトリ構造は次のようになります。
(root directory name)
|-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
ステップ 3: 2 つの S3 バケットを作成する
(前のステップ: ステップ 2: buildspec ファイルを作成する)
このチュートリアル用として 1 つのバケットを使用することもできますが、2 つのバケットを使用する方が、ビルド入力の送信元およびビルド出力の送信先の確認が簡単になります。
-
これらのバケットのいずれか(入力バケット)にビルド入力が保存されます。このチュートリアルでは、この入力バケットの名前は
codebuild-
です(region-ID
-account-ID
-input-bucketregion-ID
はバケットの AWS リージョン、account-ID
は AWS アカウント ID です)。 -
もう 1 つのバケット(出力バケット)にはビルド出力が保存されます。このチュートリアルでは、この出力バケットの名前は
codebuild-
です。region-ID
-account-ID
-output-bucket
これらのバケットに別の名前を選択した場合は、このチュートリアル全体で、その名前を使用してください。
これらの 2 つのバケットは、ビルドと同じ AWS リージョン内にある必要があります。たとえば、米国東部 (オハイオ) リージョンでビルドを実行するように CodeBuild に指示している場合、バケットは米国東部 (オハイオ) リージョンにある必要があります。
詳細については、Amazon Simple Storage Service コンソールユーザーガイドの「バケットの作成」を参照してください。
注記
CodeBuild では、CodeCommit、GitHub、および Bitbucket の各リポジトリに保存されているビルド入力もサポートされますが、このチュートリアルではこれらの使用方法については説明しません。詳細については、「ビルドを計画する」を参照してください。
ステップ 4: ソースコードと buildspec ファイルをアップロードする
(前のステップ: ステップ 3: 2 つの S3 バケットを作成する)
このステップでは、入力バケットにソースコードとビルド仕様ファイルを追加します。
オペレーティングシステムの zip ユーティリティを使用して、MessageUtil.zip
、MessageUtil.java
、TestMessageUtil.java
、および pom.xml
を含む buildspec.yml
という名前のファイルを作成します。
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
重要
CodeCommit、GitHub、および Bitbucket の各リポジトリでは、規約に従って、buildspec.yml
というビルド仕様ファイルを各リポジトリのルート (最上位) に保存するか、ビルド仕様宣言をビルドプロジェクト定義の一部として含める必要があります。リポジトリのソースコードとビルド仕様ファイルを含む ZIP ファイルを作成しないでください。
S3 バケットに保存されたビルド入力に限り、ソースコードおよび規約に基づく buildspec.yml
というビルド仕様ファイルを圧縮した ZIP ファイルをルート(最上位)に作成するか、ビルド仕様宣言をビルドプロジェクト定義の一部として含める必要があります。
ビルド仕様ファイルに別の名前を使用するか、ルート以外の場所でビルド仕様を参照する場合は、ビルドプロジェクト定義の一部としてビルド仕様の上書きを指定できます。詳細については、「buildspec ファイル名とストレージの場所」を参照してください。
ステップ 5: ビルドプロジェクトを作成する
(前のステップ: ステップ 4: ソースコードと buildspec ファイルをアップロードする)
このステップでは、AWS CodeBuild がビルドの実行に使用するビルドプロジェクトを作成します。ビルドプロジェクトには、ビルドの実行方法に関する情報が含まれています。これには、ソースコードの取得先、使用するビルド環境、実行するビルドコマンド、ビルド出力の格納先が含まれます。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステム、プログラミング言語ランタイム、およびツールの組み合わせを表します。ビルド環境は Docker イメージとして表されます。詳細については、Docker Docs ウェブサイトの Docker overview
このビルド環境では、CodeBuild に、Java 開発キット (JDK) のバージョンおよび Apache Maven が含まれる Docker イメージを使用するように指示します。
ビルドプロジェクトを作成するには
AWS Management Console にサインインして、AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home
) を開きます。 -
AWS リージョンセレクタを使用して、CodeBuild がサポートされている AWS リージョンを選択します。詳細については、「Amazon Web Services 全般のリファレンス」の「AWS CodeBuild エンドポイントとクォータ」を参照してください。
CodeBuild の情報ページが表示された場合、ビルドプロジェクトを作成するを選択します。それ以外の場合は、ナビゲーションペインでビルドを展開し、[ビルドプロジェクト] を選択し、次に [Create build project (ビルドプロジェクトの作成)] を選択します。
-
[Create build project (ビルドプロジェクトの作成)] ページで、[Project configuration (プロジェクト設定)] の [プロジェクト名] にこのビルドプロジェクトの名前を入力します (この例では、
codebuild-demo-project
)。ビルドプロジェクトの名前は、各 AWS アカウントで一意である必要があります。別の名前を選択した場合は、このチュートリアル全体でその名前を使用してください。注記
[Create build project (ビルドプロジェクトの作成)] ページに「このオペレーションを実行する権限がありません」というようなエラーメッセージが表示される場合があります。これは、ビルドプロジェクトを作成するアクセス許可を持たないユーザーとして AWS Management Console にサインインしたことが原因と考えられます。これを修正するには、AWS Management Console からサインアウトし、次の IAM エンティティのいずれかに属する認証情報でサインインし直します。
-
AWS アカウントの管理者ユーザー。詳細については、ユーザーガイドの「最初の AWS アカウントルートユーザーおよびグループの作成」を参照してください。
-
ユーザー (またはユーザーが属する IAM グループ) に
AWSCodeBuildAdminAccess
、AmazonS3ReadOnlyAccess
、およびIAMFullAccess
管理ポリシーがアタッチされている、AWS アカウントのユーザー。これらのアクセス許可を持つユーザーやグループが AWS アカウントに存在せず、これらのアクセス許可をユーザーやグループに追加できない場合は、AWS アカウント管理者に連絡してサポートを依頼してください。詳細については、「AWS CodeBuild の AWS マネージド (事前定義) ポリシー」を参照してください。
どちらのオプションにも、このチュートリアルを完了できるように、ビルドプロジェクトの作成を許可する管理者権限が含まれています。常に必要最小限のアクセス許可を使用してタスクを達成してください。詳細については、「AWS CodeBuild の許可に関するリファレンス」を参照してください。
-
-
[Source] (ソース) で、[Source provider] (ソースプロバイダー) として [Amazon S3] を選択します。
-
[Bucket] (バケット) として、[codebuild-
region-ID
-account-ID
-input-bucket] を選択します。 -
[S3 オブジェクトキー] に「
MessageUtil.zip
」と入力します。 -
[環境] の [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択したままにしておきます。
-
[オペレーティングシステム] で、[Amazon Linux] を選択します。
-
[ランタイム] で、[Standard (標準)] を選択します。
-
[イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:corretto11] を選択します。
-
[サービスロール] で、[New service role (新しいサービスロール)] は選択したままにして、[Role name (ロール名)] は変更しません。
-
[Buildspec] で、[Use a buildspec file (buildspec ファイルを使用)] を選択したままにしておきます。
-
[Artifacts] (アーティファクト) で、[Type] (タイプ) として [Amazon S3] を選択します。
-
[Bucket name] (バケット名) として、[codebuild-
region-ID
-account-ID
-output-bucket] を選択します。 -
[名前] と [パス] を空白のままにします。
-
[Create build project (ビルドプロジェクトの作成)] を選択します。
ステップ 6: ビルドを実行する
(前のステップ: ステップ 5: ビルドプロジェクトを作成する)
このステップでは、ビルドプロジェクトの設定でビルドを実行するように AWS CodeBuild に指示します。
ビルドを実行するには
AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home
) を開きます。 -
ナビゲーションペインで、[Build projects] を選択します。
-
ビルドプロジェクトのリストで、[codebuild-demo-project]、[Start build] (ビルドの開始) の順に選択します。ビルドがすぐに開始されます。
ステップ 7: ビルド情報の要約を表示する
(前のステップ: ステップ 6: ビルドを実行する)
このステップでは、ビルドのステータスに関する要約情報を表示します。
要約されたビルド情報を表示するには
-
[codebuild-demo-project:
<build-ID>
] ページが表示されない場合は、ナビゲーションバーで [Build history] (ビルド履歴) を選択します。次にビルドプロジェクトのリストで、[Project] (プロジェクト) の [codebuild-demo-project] に対応する [Build run] (ビルドの実行) リンクを選択します。一致するリンクは 1 つだけです。(このチュートリアルを完了したことがある場合は、[完了済み] 列で最新の値のリンクを選択します。) -
[Build status] (ビルドステータス) ページの [Phase details] (フェーズ詳細) に以下のビルドフェーズが表示され、[Status] (ステータス) 列に [Succeeded] (成功) と示されます。
-
SUBMITTED
-
QUEUED
-
PROVISIONING
-
DOWNLOAD_SOURCE
-
INSTALL
-
PRE_BUILD
-
BUILD
-
POST_BUILD
-
UPLOAD_ARTIFACTS
-
FINALIZING
-
COMPLETED
[ビルドステータス] で、[Succeeded (成功)] が表示されます。
代わりに [進行中] と表示される場合は、更新ボタンを選択します。
-
-
各ビルドフェーズの横に表示される [所要時間] 値は、ビルドフェーズの所要時間を示します。[終了時間] 値は、ビルドフェーズの完了日時を示します。
ステップ 8: 詳細なビルド情報を表示する
(前のステップ: ステップ 7: ビルド情報の要約を表示する)
このステップでは、CloudWatch Logs のビルドに関する詳細情報を表示します。
注記
機密情報を保護するために、CodeBuild ログでは次の情報が非表示になっています。
-
AWS アクセスキー ID。詳細については、AWS Identity and Access Management ユーザーガイドの IAM ユーザーのアクセスキーの管理を参照してください。
-
パラメータストアを使用して指定された文字列。詳細については、「Amazon EC2 Systems Manager ユーザーガイド」の「Systems Manager パラメータストア」および「Systems Manager パラメータストアコンソールのチュートリアル」を参照してください。
-
AWS Secrets Manager を使用して指定された文字列。詳細については、「キー管理」を参照してください。
詳細なビルド情報を表示するには
-
ビルドの詳細ページが前のステップから引き続き表示された状態で、ビルドログの最後の 10,000 行が [Build logs] に表示されます。CloudWatch Logs でビルドログ全体を表示するには、[View entire log] (ログ全体の表示) リンクを選択します。
-
CloudWatch Logs ログストリームでは、ログイベントを参照できます。デフォルトでは、ログイベントの最後のセットだけが表示されます。以前のログイベントを表示するには、リストの先頭にスクロールします。
-
このチュートリアルでは、ほとんどのログイベントに、CodeBuild でビルド依存ファイルをビルド環境にダウンロードおよびインストールする操作に関する詳細情報が含まれますが、これらの情報は不要な場合があります。[Filter events] ボックスを使用すると、表示する情報量を減らすことができます。例えば、[Filter events] (イベントのフィルター) で「
"[INFO]"
」と入力した場合、「[INFO]
」を含むイベントのみが表示されます。詳細については、Amazon CloudWatch ユーザーガイドの「フィルターとパターンの構文」を参照してください。
ステップ 9: ビルド出力アーティファクトを取得する
(前のステップ: ステップ 8: 詳細なビルド情報を表示する)
このステップでは、CodeBuild が構築して出力バケットにアップロードした「messageUtil-1.0.jar
」ファイルを取得します。
このステップを完了するには、CodeBuild コンソールまたは Amazon S3 コンソールを使用します。
ビルド出力アーティファクトを取得するには (AWS CodeBuild コンソール)
-
CodeBuild コンソールが開いていて、ビルドの詳細ページが前のステップから引き続き表示されている状態で、[Build details] を選択して [Artifacts] セクションまでスクロールします。
注記
ビルドの詳細ページが表示されていない場合は、ナビゲーションバーで [Build history] (ビルド履歴)、[Build run] (ビルドの実行) リンクの順に選択します。
-
Amazon S3 フォルダへのリンクは、[Artifacts upload location] (アーティファクトのアップロード場所) の下にあります。Amazon S3 内のフォルダが開き、「
messageUtil-1.0.jar
」という名前のビルド出力アーティファクトファイルを見つけます。
ビルド出力アーティファクトを取得するには (Amazon S3 コンソール)
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
codebuild-
を開きます。region-ID
-account-ID
-output-bucket -
codebuild-demo-project
フォルダを開きます。 -
target
という名前のフォルダを開き、messageUtil-1.0.jar
という名前のビルド出力アーティファクトファイルを見つけます。
ステップ 10: S3 入力バケットを削除する
(前のステップ: ステップ 9: ビルド出力アーティファクトを取得する)
AWS アカウントで継続的に料金が発生しないように、このチュートリアルで使用した入力・出力バケットを削除することもできます。手順については、Amazon Simple Storage Service ユーザーガイドでバケットを削除、または空にする方法を参照してください。
IAM ユーザー を使用している場合、このバケットを削除するユーザーまたは管理者 IAM ユーザーには、さらに高いアクセス権限が必要です。マーカー間で次のステートメント (###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 ファイルを作成しました。次に、ビルドの結果を表示しました。
これで、独自のシナリオに CodeBuild を使用できます。「ビルドを計画する」の手順に従ってください。もう少し準備が必要な場合は、用意されているサンプルでビルドを試すことができます。詳細については、「CodeBuild のユースケースベースのサンプル」を参照してください。
AWS CodeBuild を使用した AWS CLI の開始方法
このチュートリアルでは、AWS CodeBuild を使用して、サンプルのソースコード入力ファイル(ビルド入力アーティファクトまたはビルド入力と呼ばれる)のコレクションから、ソースコードのデプロイ可能バージョン(ビルド出力アーティファクトまたはビルド出力と呼ばれる)を生成します。具体的には、一般的なビルドツールである Apache Maven を使用して Java クラスファイルのセットを Java アーカイブ (JAR) ファイルにビルドするように CodeBuild に指示します。このチュートリアルを完了するために、Apache Maven または Java に精通している必要はありません。
CodeBuild は、CodeBuild コンソール、AWS CodePipeline、AWS CLI、または AWS SDK を使用して作業できます。このチュートリアルでは、 AWS CLI で CodeBuild を使用する方法を示します。CodePipeline の使用については、「CodePipeline で CodeBuild を使用」を参照してください。
重要
このチュートリアルのステップでは、AWS アカウントに課金される可能性のあるリソース(S3 バケットなど)を作成する必要があります。これには、CodeBuild の料金、および Amazon S3、AWS KMS、CloudWatch Logs に関連する AWS リソースとアクションの料金が含まれます。詳細については、CodeBuild 料金表
トピック
ステップ 1: ソースコードを作成する
(一部: AWS CodeBuild を使用した AWS CLI の開始方法)
このステップでは、CodeBuild が出力バケットにビルドするソースコードを作成します。このソースコードは 2 つの Java クラスファイルと Apache Maven プロジェクトオブジェクトモデル (POM) ファイルで構成されています。
-
ローカルコンピュータまたはインスタンスの空のディレクトリに、このディレクトリ構造を作成します。
(root directory name)
`-- src |-- main | `-- java `-- test `-- java -
任意のテキストエディタを使用して、このファイルを作成し、
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!
を出力した後に文字列が続きます。 -
このファイルを作成し、
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()); } }
このクラスファイルは
message
クラスのMessageUtil
変数をRobert
に設定します。その後、文字列message
およびRobert
が出力に表示されているかどうかを調べることによって、Hi!Robert
変数が正常に設定されたかどうかを調べます。 -
このファイルを作成し、
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> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> </plugins> </build> </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
ステップ 2: buildspec ファイルを作成する
(前のステップ: ステップ 1: ソースコードを作成する)
このステップでは、ビルド仕様ファイルを作成します。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステム、プログラミング言語ランタイム、およびツールの組み合わせを表します。CodeBuild では、ビルド仕様がないと、ビルド入力をビルド出力に正常に変換できません。また、ビルド環境でビルド出力アーティファクトを特定して出力バケットにアップロードすることもできません。
このファイルを作成し、buildspec.yml
という名前を付けて、ルート (最上位) ディレクトリに保存します。
version: 0.2 phases: install: runtime-versions: java: corretto11 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 かどうかをテストできます。
注記
ソースコードにビルド仕様ファイルを含める代わりに、ビルドプロジェクトを作成するときに個別にビルドコマンドを宣言することができます。これは、毎回ソースコードのリポジトリを更新せずに、異なるビルドコマンドでソースコードをビルドする場合に役立ちます。詳細については、「buildspec の構文」を参照してください。
このビルド仕様宣言の詳細は次の通りです。
-
version
は、使用されているビルド仕様スタンダードのバージョンを表します。このビルド仕様宣言では、最新バージョン0.2
が使用されます。 -
phases
は、CodeBuild にコマンドの実行を指示するビルドフェーズを表します。これらのビルドフェーズはinstall
、pre_build
、build
、post_build
として、ここにリストされています。これらのビルドフェーズ名のスペルを変更することはできず、追加のビルドフェーズ名を作成することもできません。この例では、
build
フェーズ中に、 CodeBuild によってmvn install
コマンドが実行されます。このコマンドは、コンパイルされた Java クラスファイルをビルド出力アーティファクトにコンパイル、テスト、パッケージ化するように Apache Maven に指示します。完全にするために、この例では、いくつかのecho
コマンドが各ビルドフェーズに配置されています。このチュートリアルの後半で詳細なビルド情報を見る際に、これらのecho
コマンドの出力は、CodeBuild がコマンドを実行する方法とその順序を理解するのに役立ちます。(この例にはすべてのビルドフェーズが含まれていますが、コマンドを実行しないビルドフェーズは含める必要がありません)。各ビルドフェーズについて、CodeBuild は最初から最後まで、各コマンドを一度に 1 つずつ、指定された順序で実行します。 -
「
artifacts
」は、CodeBuild が出力バケットにアップロードする一連のビルド出力アーティファクトを表します。「files
」は、ビルド出力に含めるファイルを表します。CodeBuild は、ビルド環境の「messageUtil-1.0.jar
」相対ディレクトリにある、単一の「target
」ファイルをアップロードします。ファイル名messageUtil-1.0.jar
およびディレクトリ名target
は、この例でのみ Apache Maven がビルド出力アーティファクトを作成して格納する方法に基づいています。独自のビルドでは、これらのファイル名とディレクトリは異なります。
詳細については、「ビルド仕様 (buildspec) に関するリファレンス」を参照してください。
この時点で、ディレクトリ構造は次のようになります。
(root directory name)
|-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
ステップ 3: 2 つの S3 バケットを作成する
(前のステップ: ステップ 2: buildspec ファイルを作成する)
このチュートリアル用として 1 つのバケットを使用することもできますが、2 つのバケットを使用する方が、ビルド入力の送信元およびビルド出力の送信先の確認が簡単になります。
-
これらのバケットのいずれか(入力バケット)にビルド入力が保存されます。このチュートリアルでは、この入力バケットの名前は
codebuild-
です(region-ID
-account-ID
-input-bucketregion-ID
はバケットの AWS リージョン、account-ID
は AWS アカウント ID です)。 -
もう 1 つのバケット(出力バケット)にはビルド出力が保存されます。このチュートリアルでは、この出力バケットの名前は
codebuild-
です。region-ID
-account-ID
-output-bucket
これらのバケットに別の名前を選択した場合は、このチュートリアル全体で、その名前を使用してください。
これらの 2 つのバケットは、ビルドと同じ AWS リージョン内にある必要があります。たとえば、米国東部 (オハイオ) リージョンでビルドを実行するように CodeBuild に指示している場合、バケットは米国東部 (オハイオ) リージョンにある必要があります。
詳細については、Amazon Simple Storage Service コンソールユーザーガイドの「バケットの作成」を参照してください。
注記
CodeBuild では、CodeCommit、GitHub、および Bitbucket の各リポジトリに保存されているビルド入力もサポートされますが、このチュートリアルではこれらの使用方法については説明しません。詳細については、「ビルドを計画する」を参照してください。
ステップ 4: ソースコードと buildspec ファイルをアップロードする
(前のステップ: ステップ 3: 2 つの S3 バケットを作成する)
このステップでは、入力バケットにソースコードとビルド仕様ファイルを追加します。
オペレーティングシステムの zip ユーティリティを使用して、MessageUtil.zip
、MessageUtil.java
、TestMessageUtil.java
、および pom.xml
を含む buildspec.yml
という名前のファイルを作成します。
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
重要
CodeCommit、GitHub、および Bitbucket の各リポジトリでは、規約に従って、buildspec.yml
というビルド仕様ファイルを各リポジトリのルート (最上位) に保存するか、ビルド仕様宣言をビルドプロジェクト定義の一部として含める必要があります。リポジトリのソースコードとビルド仕様ファイルを含む ZIP ファイルを作成しないでください。
S3 バケットに保存されたビルド入力に限り、ソースコードおよび規約に基づく buildspec.yml
というビルド仕様ファイルを圧縮した ZIP ファイルをルート(最上位)に作成するか、ビルド仕様宣言をビルドプロジェクト定義の一部として含める必要があります。
ビルド仕様ファイルに別の名前を使用するか、ルート以外の場所でビルド仕様を参照する場合は、ビルドプロジェクト定義の一部としてビルド仕様の上書きを指定できます。詳細については、「buildspec ファイル名とストレージの場所」を参照してください。
ステップ 5: ビルドプロジェクトを作成する
(前のステップ: ステップ 4: ソースコードと buildspec ファイルをアップロードする)
このステップでは、AWS CodeBuild がビルドの実行に使用するビルドプロジェクトを作成します。ビルドプロジェクトには、ビルドの実行方法に関する情報が含まれています。これには、ソースコードの取得先、使用するビルド環境、実行するビルドコマンド、ビルド出力の格納先が含まれます。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステム、プログラミング言語ランタイム、およびツールの組み合わせを表します。ビルド環境は Docker イメージとして表されます。詳細については、Docker Docs ウェブサイトの Docker overview
このビルド環境では、CodeBuild に、Java 開発キット (JDK) のバージョンおよび Apache Maven が含まれる Docker イメージを使用するように指示します。
ビルドプロジェクトを作成するには
-
AWS CLI を使用して create-project コマンドを実行します。
aws codebuild create-project --generate-cli-skeleton
JSON 形式のデータが出力に表示されます。
create-project.json
がインストールされているローカルコンピュータまたはインスタンス上の場所にある AWS CLI というファイルにデータをコピーします。別のファイル名を使用する場合は、このチュートリアル全体でそのファイル名を使用してください。コピーされたデータをこの形式に従って変更して、結果を保存します。
{ "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/standard:5.0", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "serviceIAMRole
" }serviceIAMRole
を、CodeBuild サービスロールの Amazon リソースネーム (ARN) (例:arn:aws:iam::
) に置き換えます。サービスロールを作成する場合は、「CodeBuild が他の AWS のサービスとやり取りすることを許可」を参照してください。account-ID
:role/role-name
このデータの各要素は以下のとおりです。
-
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/standard:5.0
Docker イメージリポジトリ内の Docker イメージの場合はaws/codebuild/standard
)。CodeBuild は、Docker イメージの名前です。5.0
は、Docker イメージのタグです。シナリオで使用できる Docker イメージをさらに見つけるには、「ビルド環境に関するリファレンス」を参照してください。
-
environment
の場合、computeType
は、CodeBuild が使用するコンピューティングリソース (この例ではBUILD_GENERAL1_SMALL
) を表す必須の値です。
注記
description
、buildspec
、auth
(type
とresource
を含む)、path
、namespaceType
、name
(artifacts
)、packaging
、environmentVariables
(name
とvalue
を含む)、timeoutInMinutes
、encryptionKey
、tags
(key
とvalue
を含む) などの元の JSON 形式のデータで使用可能なその他の値はオプションです。これらは、このチュートリアルで使用されていないため、ここには示されていません。詳細については、「ビルドプロジェクトの作成 (AWS CLI)」を参照してください。 -
-
保存したばかりのファイルがあるディレクトリに移動してから、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/standard:5.0", "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
は、ビルドが完了していない場合、CodeBuild がビルドを停止するまでの時間 (分) を表します。(デフォルトは 60 分です。) -
created
は、ビルドプロジェクトが作成された時刻 (Unix の時間形式) を表します。 -
environmentVariables
は、CodeBuild がビルド中に使用するために宣言されて、使用可能な環境変数を表します。 -
encryptionKey
は、CodeBuild がビルド出力アーティファクトの暗号化に使用したカスタマー管理キーの ARN を表します。 -
arn
は、ビルドプロジェクトの ARN を表します。
-
-
注記
create-project コマンドの実行後に、次のようなメッセージが出力される場合があります。「ユーザー: user-ARN
は次のことを実行する権限がありません: codebuild:CreateProject」 これは、CodeBuild を使用してビルドプロジェクトを作成するための十分なアクセス許可を持たないユーザーの認証情報で AWS CLI を設定したことが原因と考えられます。これを修正するには、次の IAM エンティティのいずれかに属する認証情報を使用して AWS CLI を設定します。
-
AWS アカウントの管理者ユーザー。詳細については、ユーザーガイドの「最初の AWS アカウントルートユーザーおよびグループの作成」を参照してください。
-
ユーザー (またはユーザーが属する IAM グループ) に
AWSCodeBuildAdminAccess
、AmazonS3ReadOnlyAccess
、およびIAMFullAccess
管理ポリシーがアタッチされている、AWS アカウントのユーザー。これらのアクセス許可を持つユーザーやグループが AWS アカウントに存在せず、これらのアクセス許可をユーザーやグループに追加できない場合は、AWS アカウント管理者に連絡してサポートを依頼してください。詳細については、「AWS CodeBuild の AWS マネージド (事前定義) ポリシー」を参照してください。
ステップ 6: ビルドを実行する
(前のステップ: ステップ 5: ビルドプロジェクトを作成する)
このステップでは、ビルドプロジェクトの設定でビルドを実行するように AWS CodeBuild に指示します。
ビルドを実行するには
-
AWS CLI を使用して start-build コマンドを実行します。
aws codebuild start-build --project-name
project-name
project-name
を、前の手順のビルドプロジェクト名 (例:codebuild-demo-project
) に置き換えます。 -
成功すると、次のようなデータが出力に表示されます。
{ "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/standard:5.0", "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: ビルド情報の要約を表示する
(前のステップ: ステップ 6: ビルドを実行する)
このステップでは、ビルドのステータスに関する要約情報を表示します。
要約されたビルド情報を表示するには
-
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/standard:5.0", "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
は、CodeBuild がビルドプロセス中に実行する一連のビルドフェーズを表します。各ビルドフェーズに関する情報がstartTime
、endTime
、durationInSeconds
(フェーズの開始時と終了時、Unix 時間形式で表示、持続時間 (秒))、phaseType
(SUBMITTED
、PROVISIONING
、DOWNLOAD_SOURCE
、INSTALL
、PRE_BUILD
、BUILD
、POST_BUILD
、UPLOAD_ARTIFACTS
、FINALIZING
、COMPLETED
など)、phaseStatus
(SUCCEEDED
、FAILED
、FAULT
、TIMED_OUT
、IN_PROGRESS
、STOPPED
など) として個別にリストされます。batch-get-builds コマンドを初めて実行するときは、多くの (またはまったく) フェーズが存在しない可能性があります。同じビルド ID を持つ batch-get-builds コマンドを続けて実行すると、より多くのビルドフェーズが出力に表示されます。 -
logs
は、Amazon CloudWatch Logs のビルドのログに関する情報を表します。 -
md5sum
およびsha256sum
は、ビルドの出力アーティファクトの MD5 と SHA-256 ハッシュを表します。これらは、関連するビルドプロジェクトのpackaging
値がZIP
に設定されている場合にのみ出力に表示されます。(このチュートリアルでは設定していません。) これらのハッシュとチェックサムツールを使用して、ファイルの完全性と信頼性を確認することができます。注記
Amazon S3 コンソールを使用して、これらのハッシュを表示することもできます。ビルド出力アーティファクトの横にあるボックスを選択し、[アクション]、[プロパティ] の順に選択します。[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 の時間形式) を表します。
-
注記
Amazon S3 メタデータには、
x-amz-meta-codebuild-buildarn
という名前の CodeBuild ヘッダーがあります。このヘッダーには、Amazon S3 にアーティファクトを公開する CodeBuild ビルドのbuildArn
が含まれています。通知のソーストラッキングを許可し、アーティファクトの生成元であるビルドを参照するためにbuildArn
を追加します。 -
ステップ 8: 詳細なビルド情報を表示する
(前のステップ: ステップ 7: ビルド情報の要約を表示する)
このステップでは、CloudWatch Logs のビルドに関する詳細情報を表示します。
注記
機密情報を保護するために、CodeBuild ログでは次の情報が非表示になっています。
-
AWS アクセスキー ID。詳細については、AWS Identity and Access Management ユーザーガイドの IAM ユーザーのアクセスキーの管理を参照してください。
-
パラメータストアを使用して指定された文字列。詳細については、「Amazon EC2 Systems Manager ユーザーガイド」の「Systems Manager パラメータストア」および「Systems Manager パラメータストアコンソールのチュートリアル」を参照してください。
-
AWS Secrets Manager を使用して指定された文字列。詳細については、「キー管理」を参照してください。
詳細なビルド情報を表示するには
-
ウェブブラウザを使用して、前の手順の出力に表示された
deepLink
の場所に移動します (例:https://console.aws.amazon.com/cloudwatch/home?region=
)。region-ID
#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE -
CloudWatch Logs ログストリームでは、ログイベントを参照できます。デフォルトでは、ログイベントの最後のセットだけが表示されます。以前のログイベントを表示するには、リストの先頭にスクロールします。
-
このチュートリアルでは、ほとんどのログイベントに、CodeBuild でビルド依存ファイルをビルド環境にダウンロードおよびインストールする操作に関する詳細情報が含まれますが、これらの情報は不要な場合があります。[Filter events] ボックスを使用すると、表示する情報量を減らすことができます。例えば、[Filter events] (イベントのフィルター) で「
"[INFO]"
」と入力した場合、「[INFO]
」を含むイベントのみが表示されます。詳細については、Amazon CloudWatch ユーザーガイドの「フィルターとパターンの構文」を参照してください。
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
この例では、CodeBuild はビルド前、ビルド、およびビルド後のビルドフェーズを正常に完了しました。ユニットテストを実行し、messageUtil-1.0.jar
ファイルは正常に構築されました。
ステップ 9: ビルド出力アーティファクトを取得する
(前のステップ: ステップ 8: 詳細なビルド情報を表示する)
このステップでは、CodeBuild が構築して出力バケットにアップロードした「messageUtil-1.0.jar
」ファイルを取得します。
このステップを完了するには、CodeBuild コンソールまたは Amazon S3 コンソールを使用します。
ビルド出力アーティファクトを取得するには (AWS CodeBuild コンソール)
-
CodeBuild コンソールが開いていて、ビルドの詳細ページが前のステップから引き続き表示されている状態で、[Build details] を選択して [Artifacts] セクションまでスクロールします。
注記
ビルドの詳細ページが表示されていない場合は、ナビゲーションバーで [Build history] (ビルド履歴)、[Build run] (ビルドの実行) リンクの順に選択します。
-
Amazon S3 フォルダへのリンクは、[Artifacts upload location] (アーティファクトのアップロード場所) の下にあります。Amazon S3 内のフォルダが開き、「
messageUtil-1.0.jar
」という名前のビルド出力アーティファクトファイルを見つけます。
ビルド出力アーティファクトを取得するには (Amazon S3 コンソール)
https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
codebuild-
を開きます。region-ID
-account-ID
-output-bucket -
codebuild-demo-project
フォルダを開きます。 -
target
という名前のフォルダを開き、messageUtil-1.0.jar
という名前のビルド出力アーティファクトファイルを見つけます。
ステップ 10: S3 入力バケットを削除する
(前のステップ: ステップ 9: ビルド出力アーティファクトを取得する)
AWS アカウントで継続的に料金が発生しないように、このチュートリアルで使用した入力・出力バケットを削除することもできます。手順については、Amazon Simple Storage Service ユーザーガイドでバケットを削除、または空にする方法を参照してください。
IAM ユーザー を使用している場合、このバケットを削除するユーザーまたは管理者 IAM ユーザーには、さらに高いアクセス権限が必要です。マーカー間で次のステートメント (###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 ファイルを作成しました。次に、ビルドの結果を表示しました。
これで、独自のシナリオに CodeBuild を使用できます。「ビルドを計画する」の手順に従ってください。もう少し準備が必要な場合は、用意されているサンプルでビルドを試すことができます。詳細については、「CodeBuild のユースケースベースのサンプル」を参照してください。