このページでは、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 でアプリケーションをデプロイする方法を学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。