Compilar, probar y contenerizar aplicaciones Java

En esta página se explica cómo usar Cloud Build para compilar, probar y contenerizar aplicaciones basadas en Java, subir imágenes de contenedor a Artifact Registry y generar la procedencia de la compilación.

Antes de empezar

Usar la imagen maven o gradle

Puedes configurar Cloud Build para compilar aplicaciones Java con la imagen maven o la imagen gradle de Docker Hub.

maven

Para ejecutar tus tareas en la imagen maven, añade un paso a tu configuración de compilación con los siguientes campos:

  • name: asigna el valor maven o maven:<tag> a este campo, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usará la imagen latest de forma predeterminada.
  • entrypoint: si se define este campo, se anula el punto de entrada predeterminado de la imagen a la que se hace referencia en name. Asigna el valor mvn a este campo para invocar mvn como punto de entrada del paso de compilación y ejecutar comandos mvn.
  • args: el campo args de un paso de compilación toma una lista de argumentos y los transfiere a la imagen a la que hace referencia el campo name.

En el siguiente paso de compilación se especifica el entrypoint de la imagen maven etiquetada como 3.3-jdk-8 y se imprime la versión de la herramienta de compilación:

steps:
- name: maven:3.3-jdk-8
  entrypoint: mvn
  args: ['--version']

gradle

Para ejecutar tus tareas en la imagen gradle, añade un paso a tu configuración de compilación con los siguientes campos:

  • name: asigna el valor gradle o gradle:<tag> a este campo, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usará la imagen latest de forma predeterminada.
  • entrypoint: si se define este campo, se anula el punto de entrada predeterminado de la imagen a la que se hace referencia en name. Asigna el valor gradle a este campo para invocar gradle como punto de entrada del paso de compilación y ejecutar comandos gradle.
  • args: el campo args de un paso de compilación toma una lista de argumentos y los transfiere a la imagen a la que hace referencia el campo name.

En el siguiente paso de compilación se especifica el entrypoint de la imagen gradle etiquetada como 5.6.2-jdk8 y se imprime la versión de la herramienta de compilación:

steps:
- name: gradle:5.6.2-jdk8
  entrypoint: gradle
  args: ['--version']

Configurar compilaciones de Java

  1. En el directorio raíz de tu proyecto, crea un archivo de configuración de compilación llamado cloudbuild.yaml.

  2. Ejecutar pruebas: maven y gradle proporcionan maven test y gradle test, que descarga las dependencias, compila las aplicaciones y ejecuta las pruebas especificadas en el código fuente. El campo args de un paso de compilación toma una lista de argumentos y los pasa a la imagen a la que hace referencia el campo name.

    En el archivo de configuración de compilación, añade test al campo args para invocar test en maven y gradle:

    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. Empaquetar aplicación: para empaquetar tu aplicación en un archivo JAR para tu imagen maven, especifica el comando package en el campo args. El comando package crea un archivo JAR en /workspace/target/.

    Para empaquetar tu aplicación en un archivo JAR para tu imagen de gradle, especifica el comando assemble en el campo args. El comando assemble crea un archivo JAR en workspace/build/libs.

    El siguiente paso de compilación empaqueta tu aplicación 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. Contenerizar la aplicación: Cloud Build proporciona una imagen Docker precompilada que puedes usar para contenerizar tu aplicación Java. Para contenerizar tu aplicación Java, en el archivo de configuración de compilación:

    • Añade un campo name y especifica la imagen de Docker prediseñada en gcr.io/cloud-builders/docker.
    • Añade un campo args y especifica los argumentos de build, incluido el nombre de la imagen del contenedor que se va a compilar y la ruta al artefacto de compilación.
    • Añade un campo images para enviar la imagen de contenedor compilada a Artifact Registry.
    • Opcional: Añade requestedVerifyOption: VERIFIED en el campo options de tu archivo de configuración de compilación para habilitar la generación de procedencia de niveles de la cadena de suministro para artefactos de software (SLSA).

    El siguiente paso de compilación crea un contenedor para tu aplicación, envía tu imagen de contenedor a Artifact Registry y genera información de procedencia de la compilación:

    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']
    

    Donde:

    • location: la ubicación regional o multirregional de tu repositorio.
    • project-id: el ID de tu proyecto de Google Cloud .
    • repository: el nombre de tu repositorio de Artifact Registry.
    • image: el nombre de la imagen de tu contenedor.
    • build-artifact: el nombre del archivo JAR creado en el paso de compilación.
  5. Inicia la compilación: cuando tengas listo el archivo de configuración de la compilación, inicia la compilación introduciendo el siguiente comando en tu terminal:

    gcloud builds submit --region=REGION --config config-file-path source-directory
    

    Donde:

    • config-file-path: la ruta al archivo de configuración de compilación. En este ejemplo, el archivo de configuración de compilación se llama cloudbuild.yaml.
    • source-directory: la ruta o la URL del código fuente.
    • REGION: una de las regiones de compilación admitidas.

    Si no especificas config-file-path y source-directory en el comando gcloud builds submit, Cloud Build da por hecho que el archivo de configuración y el código fuente se encuentran en el directorio de trabajo actual.

    Una vez que se haya completado la compilación, puedes ver los detalles del repositorio en Artifact Registry.

    También puedes ver los metadatos de procedencia de la compilación y validar la procedencia.

Ejemplos de código

A continuación, se muestran algunos repositorios de ejemplo que puedes usar para crear aplicaciones Java. Cada uno de ellos contiene una aplicación de ejemplo y un archivo de configuración de compilación para compilar y probar esa aplicación:

  • maven-example: una aplicación Java y un archivo de configuración de compilación de ejemplo para compilar y probar la aplicación con mvn.
  • gradle-example: una aplicación Java y un archivo de configuración de compilación de ejemplo para compilar y probar la aplicación con gradle.

Siguientes pasos