このページでは、Cloud Build を使用して Java ベースのアプリケーションのビルド、テスト、コンテナ化を行い、コンテナ イメージを Artifact Registry にアップロードしてビルド場所を生成する方法について説明します。
始める前に
- Java ベースのアプリケーションの作成に精通している必要があります。
Dockerfile
を含む Java プロジェクトを準備します。- Artifact Registry に Docker リポジトリがあるか、新しいリポジトリを作成します。
- Cloud Build 構成ファイルの作成方法に精通している必要があります。
- このページで
gcloud
コマンドを実行するには、Google Cloud CLI をインストールします。
maven
または gradle
イメージを使用する
Java アプリケーションをビルドするように Cloud Build を構成するには、Docker Hub から取得した maven
イメージまたは gradle
イメージを使用します。
maven
または gradle
イメージでタスクを実行するには、イメージの URL とイメージのタグ付きバージョンをビルド構成ファイルの name
フィールドに指定します。イメージタグを指定しない場合、Cloud Build はデフォルトで latest
イメージを使用します。Cloud Build は、イメージのデフォルトのエントリポイントを使用して、name
に指定されたイメージを起動します。デフォルトのエントリポイントをオーバーライドして、エントリポイントとして maven
または gradle
を呼び出すには、entrypoint
フィールドに mvn
または gradle
を指定します。
次のビルド構成ファイルでは、maven
または gradle
イメージの entrypoint
を指定し、ビルドツール バージョンを出力します。
maven
steps:
- name: maven:3.3-jdk-8
entrypoint: mvn
args: ['--version']
gradle
steps:
- name: gradle:5.6.2-jdk8
entrypoint: gradle
args: ['--version']
Java
ビルドを構成する
プロジェクトのルート ディレクトリに、
cloudbuild.yaml
という名前でビルド構成ファイルを作成します。テストを実行する:
maven
とgradle
はmaven test
とgradle test
を提供します。これにより、依存関係をダウンロードしてアプリケーションをビルドし、ソースコードで指定されたテストを実行します。ビルドステップのargs
フィールドは引数のリストを受け取り、name
フィールドによって参照されるイメージに渡します。ビルド構成ファイルで、
args
フィールドにtest
を追加します。これにより、maven
とgradle
内でtest
を呼び出します。maven
steps: - name: maven:3.3-jdk-8 entrypoint: mvn args: ['test']
gradle
steps: - name: gradle:5.6.2-jdk8 entrypoint: gradle args: ['test']
アプリケーションをパッケージ化する:
maven
イメージでアプリケーションを JAR ファイルにパッケージ化するには、args
フィールドにpackage
コマンドを指定します。package
コマンドにより、/workspace/target/
に JAR ファイルがビルドされます。gradle
イメージでアプリケーションを JAR ファイルにパッケージ化するには、args
フィールドにassemble
コマンドを指定します。assemble
コマンドにより、workspace/build/libs
に JAR ファイルがビルドされます。次のビルドステップでは、Java アプリケーションをパッケージ化します。
maven
steps: - name: maven:3.3-jdk-8 entrypoint: mvn args: ['package','-Dmaven.test.skip=true']
gradle
steps: - name: gradle:5.6.2-jdk8 entrypoint: gradle args: ['assemble']
アプリケーションをコンテナ化する: Cloud Build には、Java アプリケーションのコンテナ化に使用できるビルド済みの Docker イメージがあります。ビルド構成ファイルで Java アプリケーションをコンテナ化するには:
name
フィールドを追加し、ビルド済み Docker イメージをgcr.io/cloud-builders/docker
で指定します。args
フィールドを追加して、ビルドするコンテナ イメージの名前やビルド アーティファクトのパスなどのbuild
引数を指定します。images
フィールドを追加して、ビルドしたコンテナ イメージを Artifact Registry に push し、ビルドの場所情報を生成します。images
フィールドを使用しない場合、Cloud Build は来歴情報を記録しません。たとえば、docker push
ビルドステップを使用して Artifact Registry にイメージをアップロードすると、ビルドに来歴情報が関連付けられません。
次のビルドステップでは、アプリケーションをコンテナ化してコンテナ イメージを Artifact Registry に push し、ビルドの場所情報を生成します。
maven
steps: - name: gcr.io/cloud-builders/docker args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=target/build-artifact', '.'] images: ['location-docker.pkg.dev/project-id/repository/image']
gradle
steps: - name: gcr.io/cloud-builders/docker args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=build/libs/build-artifact', '.'] images: ['location-docker.pkg.dev/project-id/repository/image']
ここで
- location: リポジトリのリージョンまたはマルチリージョンのロケーション。
- project-id: Google Cloud プロジェクトの ID
- repository: リポジトリ Artifact Registry の名前。
- image: コンテナ イメージの名前。
- build-artifact: ビルドステップで作成された JAR ファイルの名前。
省略可: リージョン ビルドで来歴を有効にする
リージョン ビルドを使用している場合は、ビルド構成ファイルの
options
にrequestedVerifyOption
フィールドを追加します。来歴メタデータの生成を有効にするには、値をVERIFIED
に設定します。requestedVerifyOption: VERIFIED
を追加しない場合、Cloud Build はグローバル ビルドでのみ来歴を生成します。options: requestedVerifyOption: VERIFIED
ビルドを開始する: ビルド構成ファイルを準備したら、ターミナルで次のコマンドを入力してビルドを開始します。
gcloud builds submit --region=REGION --config config-file-path source-directory
ここで
- config-file-path: ビルド構成ファイルへのパス。この例では、ビルド構成ファイルの名前は
cloudbuild.yaml
です。 - source-directory: ソースコードのパスまたは URL。
REGION
: サポートされているビルド リージョンのいずれか。
gcloud builds submit
コマンドに config-file-path と source-directory を指定しないと、Cloud Build は、構成ファイルとソースコードが現在の作業ディレクトリにあることを前提とします。ビルドが完了すると、Artifact Registry でリポジトリの詳細を表示できます。
また、ビルドの場所のメタデータを表示し、場所を検証してソフトウェア サプライ チェーンを保護することもできます。
- config-file-path: ビルド構成ファイルへのパス。この例では、ビルド構成ファイルの名前は
コードの例
以下では、Java アプリのビルドに使用できるサンプル リポジトリを紹介します。各リポジトリには、サンプル アプリケーションと、このアプリケーションのビルドとテストに使用するビルド構成ファイルが含まれています。
- maven-example: Java アプリと、
mvn
でアプリのビルドとテストを行うためのサンプルのビルド構成ファイル。 - gradle-example: Java アプリと、
gradle
でアプリのビルドとテストを行うためのサンプルのビルド構成ファイル。
次のステップ
- ビルド結果を表示する方法を学習する。
- ビルドを保護する方法を学習する。
- スタンドアロン Java アプリケーションを構築する方法を学習する。
- Cloud Run でアプリケーションをデプロイする方法を学習する。
- GKE でアプリケーションをデプロイする方法を学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。