このページでは、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
maven
イメージでタスクを実行するには、次のフィールドを使用してビルド構成にステップを追加します。
name
: このフィールドの値をmaven
またはmaven:<tag>
に設定します。タグはバージョンを表します。イメージタグを指定しない場合、Cloud Build はデフォルトでlatest
イメージを使用します。entrypoint
: このフィールドを設定すると、name
で参照されるイメージのデフォルトのエントリポイントがオーバーライドされます。このフィールドの値をmvn
に設定して、ビルドステップのエントリポイントとしてmvn
を呼び出し、mvn
コマンドを実行します。args
: ビルドステップのargs
フィールドは引数のリストを受け取り、name
フィールドによって参照されるイメージに渡します。
次のビルドステップでは、3.3-jdk-8
としてタグ付けされた maven
イメージの entrypoint
を指定し、ビルドツール バージョンを出力します。
steps:
- name: maven:3.3-jdk-8
entrypoint: mvn
args: ['--version']
gradle
gradle
イメージでタスクを実行するには、次のフィールドを使用してビルド構成にステップを追加します。
name
: このフィールドの値をgradle
またはgradle:<tag>
に設定します。タグはバージョンを表します。イメージタグを指定しない場合、Cloud Build はデフォルトでlatest
イメージを使用します。entrypoint
: このフィールドを設定すると、name
で参照されるイメージのデフォルトのエントリポイントがオーバーライドされます。このフィールドの値をgradle
に設定して、ビルドステップのエントリポイントとしてgradle
を呼び出し、gradle
コマンドを実行します。args
: ビルドステップのargs
フィールドは引数のリストを受け取り、name
フィールドによって参照されるイメージに渡します。
次のビルドステップでは、5.6.2-jdk8
としてタグ付けされた gradle
イメージの entrypoint
を指定し、ビルドツール バージョンを出力します。
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 します。省略可: ビルド構成ファイルの
options
フィールドにrequestedVerifyOption: VERIFIED
を追加して、ソフトウェア アーティファクトのためのサプライ チェーン レベル(SLSA)の来歴生成を有効にします。
次のビルドステップでは、アプリケーションをコンテナ化し、コンテナ イメージを 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 ファイルの名前。
ビルドを開始する: ビルド構成ファイルを準備したら、ターミナルで次のコマンドを入力してビルドを開始します。
gcloud builds submit --region=REGION --config config-file-path source-directory
ここで
- config-file-path: ビルド構成ファイルへのパス。この例では、ビルド構成ファイルの名前は
cloudbuild.yaml
です。 - source-directory: ソースコードのパスまたは URL。
REGION
: サポートされているビルド リージョンの 1 つ。
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 でアプリケーションをデプロイする方法を学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。