Java アプリケーションのビルド、テスト、コンテナ化

このページでは、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 ビルドを構成する

  1. プロジェクトのルート ディレクトリに、cloudbuild.yaml という名前でビルド構成ファイルを作成します。

  2. テストを実行する: mavengradlemaven testgradle test を提供します。これにより、依存関係をダウンロードしてアプリケーションをビルドし、ソースコードで指定されたテストを実行します。ビルドステップの args フィールドは引数のリストを受け取り、name フィールドによって参照されるイメージに渡します。

    ビルド構成ファイルで、args フィールドに test を追加します。これにより、mavengradle 内で 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']
    
  3. アプリケーションをパッケージ化する: 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']
    
  4. アプリケーションをコンテナ化する: 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 ファイルの名前。
  5. 省略可: リージョン ビルドで来歴を有効にする

    リージョン ビルドを使用している場合は、ビルド構成ファイルの optionsrequestedVerifyOption フィールドを追加します。来歴メタデータの生成を有効にするには、値を VERIFIED に設定します。requestedVerifyOption: VERIFIED を追加しない場合、Cloud Build はグローバル ビルドでのみ来歴を生成します。

    options:
      requestedVerifyOption: VERIFIED
    
  6. ビルドを開始する: ビルド構成ファイルを準備したら、ターミナルで次のコマンドを入力してビルドを開始します。

    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-pathsource-directory を指定しないと、Cloud Build は、構成ファイルとソースコードが現在の作業ディレクトリにあることを前提とします。

    ビルドが完了すると、Artifact Registry でリポジトリの詳細を表示できます。

    また、ビルドの場所のメタデータを表示し、場所を検証してソフトウェア サプライ チェーンを保護することもできます。

コードの例

以下では、Java アプリのビルドに使用できるサンプル リポジトリを紹介します。各リポジトリには、サンプル アプリケーションと、このアプリケーションのビルドとテストに使用するビルド構成ファイルが含まれています。

  • maven-example: Java アプリと、mvn でアプリのビルドとテストを行うためのサンプルのビルド構成ファイル。
  • gradle-example: Java アプリと、gradle でアプリのビルドとテストを行うためのサンプルのビルド構成ファイル。

次のステップ