Java アプリケーションのビルド

このページでは、Cloud Build を使用して Java ベースのアプリケーションをビルドしてテストする方法について説明します。Cloud Build を初めて使用する場合は、Cloud Build クイックスタートをご覧ください。

始める前に

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-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-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-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 イメージを指定します。これは、Container Registrygcr.io/cloud-builders/docker に格納されています。
    • args フィールドを追加して、--build-argbuild 引数、ビルドするコンテナ イメージの名前、ビルド アーティファクトのパスを指定します。
    • images を追加して、ビルドイメージを Container Registry に push します。

    次のビルドステップでは、アプリケーションをコンテナ化してイメージを Container Registry に push します。

    maven

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'gcr.io/project-id/image-name', '--build-arg=JAR_FILE=target/build-artifact', '.']
    images: ['gcr.io/project-id/image-name']
    

    gradle

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'gcr.io/project-id/image-name', '--build-arg=JAR_FILE=build/libs/build-artifact', '.']
    images: ['gcr.io/project-id/image-name']
    

    ここで

    • project-id: Cloud プロジェクトの ID です。
    • image-name: コンテナ イメージの名前。
    • build-artifact: ビルドステップで作成された JAR ファイルの名前。
  5. ビルドを開始する: ビルド構成ファイルを準備したら、ターミナルで次のコマンドを入力してビルドを開始します。

    gcloud builds submit --config config-file-path source-directory
    

    ここで

    • config-file-path: ビルド構成ファイルへのパス。この例では、ビルド構成ファイルの名前は cloudbuild.yaml です。
    • source-directory: ソースコードのパスまたは URL。

    gcloud builds submit コマンドに config-file-pathsource-directory を指定しないと、Cloud Build は、構成ファイルとソースコードが現在の作業ディレクトリにあることを前提とします。

コードの例

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

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

次のステップ