En esta página, se explica cómo usar Cloud Build para compilar, probar y contenedorizar aplicaciones basadas en Java, subir tus imágenes de contenedor a Artifact Registry y generar la procedencia de la compilación.
Antes de comenzar
- Familiarízate con la creación de aplicaciones basadas en Java.
- Ten listo tu proyecto de Java, incluido un Dockerfile.
- Tener un repositorio de Docker en Artifact Registry o crear uno nuevo
- Familiarízate con la escritura de un archivo de configuración de Cloud Build.
- Para ejecutar los comandos de gcloudde esta página, instala Google Cloud CLI.
Usa las imágenes de maven o gradle
Puedes configurar Cloud Build para compilar aplicaciones de Java con la imagen de maven o la imagen de gradle de Docker Hub.
maven
Para ejecutar tus tareas en la imagen maven, agrega un paso a la configuración de compilación con los siguientes campos:
- name: Establece el valor de este campo en- maveno- maven:<tag>, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usa la imagen- latestde forma predeterminada.
- entrypoint: Si configuras este campo, se anula el punto de entrada predeterminado de la imagen a la que se hace referencia en- name. Establece el valor de este campo como- mvnpara invocar a- mvncomo el punto de entrada del paso de compilación y ejecuta los comandos de- mvn.
- args: En el campo- argsde un paso de compilación, se toma una lista de argumentos y se los pasa a la imagen a la que se hace referencia en el campo- name.
En el siguiente paso de compilación, se especifica el entrypoint para 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 de gradle, agrega un paso a la configuración de compilación con los siguientes campos:
- name: Establece el valor de este campo en- gradleo- gradle:<tag>, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usa la imagen- latestde forma predeterminada.
- entrypoint: Si configuras este campo, se anula el punto de entrada predeterminado de la imagen a la que se hace referencia en- name. Establece el valor de este campo como- gradlepara invocar a- gradlecomo el punto de entrada del paso de compilación y ejecuta los comandos de- gradle.
- args: En el campo- argsde un paso de compilación, se toma una lista de argumentos y se los pasa a la imagen a la que se hace referencia en el campo- name.
En el siguiente paso de compilación, se especifica el entrypoint para 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']
Configura compilaciones de Java
- En el directorio raíz del proyecto, crea un archivo de configuración de compilación llamado - cloudbuild.yaml.
- Ejecuta pruebas: - maveny- gradleproporcionan- maven testy- gradle test, que descargan dependencias, compilan las aplicaciones y ejecutan las pruebas especificadas en el código fuente. En el campo- argsde un paso de compilación, se toma una lista de argumentos y se los pasa a la imagen a la que se hace referencia en el campo- name.- En el archivo de configuración de compilación, agrega - testal campo- argspara invocar- testdentro de- maveny- 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']
- Empaqueta la aplicación: A fin de empaquetar la aplicación en un archivo JAR para la imagen de - maven, especifica el comando- packageen el campo- args. El comando- packagecompila un archivo JAR en- /workspace/target/.- Con el fin de empaquetar la aplicación en un archivo JAR para la imagen de - gradle, especifica el comando- assembleen el campo- args. El comando- assemblecompila un archivo JAR en- workspace/build/libs.- En el siguiente paso de compilación, se empaqueta la aplicación de 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']
- Crea contenedores en la aplicación: Cloud Build proporciona una imagen de Docker compilada con anterioridad que puedes usar para crear contenedores en la aplicación de Java. Para crear contenedores en tu aplicación de Java, sigue estos pasos en tu archivo de configuración de compilación: - Agrega un campo namey especifica la imagen prediseñada de Docker engcr.io/cloud-builders/docker.
- Agrega un campo argsy especifica los argumentosbuild, incluido el nombre de la imagen de contenedor que se compilará y la ruta a tu artefacto de compilación.
- Agrega un campo imagespara enviar la imagen del contenedor compilada a Artifact Registry.
- Opcional: Agrega - requestedVerifyOption: VERIFIEDdentro del campo- optionsen tu archivo de configuración de compilación para habilitar la generación de procedencia de niveles de cadena de suministro para artefactos de software (SLSA).
 - En el siguiente paso de compilación, se crean contenedores en la aplicación, se envía la imagen de contenedor a Artifact Registry y se 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']- Aquí: - location: Es la ubicación regional o multirregional de tu repositorio.
- project-id: Es el ID de tu Google Cloud proyecto.
- repository: Es el nombre de tu repositorio de Artifact Registry.
- image: El nombre de tu imagen de contenedor
- build-artifact: El nombre de tu archivo JAR creado a partir del paso de compilación.
 
- Agrega un campo 
- Comienza a compilar: Cuando tengas listo el archivo de configuración de compilación, ingresa el siguiente comando en la terminal para comenzar la compilación: - gcloud builds submit --region=REGION --config config-file-path source-directory- En el ejemplo anterior, se ilustra lo siguiente: - config-file-path: Es la ruta de acceso a tu 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 de acceso o la URL al código fuente.
- REGION: Es una de las regiones de compilación compatibles.
 - Si no se especifica config-file-path ni source-directory en el comando - gcloud builds submit, Cloud Build da por hecho que el archivo de configuración y el código fuente están en el directorio de trabajo actual.- Una vez que se complete la compilación, podrás ver los detalles del repositorio en Artifact Registry. - También puedes ver los metadatos de la procedencia de la compilación y validar la procedencia. 
- config-file-path: Es la ruta de acceso a tu archivo de configuración de compilación. En este ejemplo, el archivo de configuración de compilación se llama 
Ejemplos de código
Estos son algunos repositorios de ejemplo que puedes usar a fin de compilar apps de Java; contienen una aplicación de muestra y un archivo de configuración de compilación para compilar y probar dicha aplicación:
- maven-example: Es una app de Java y un archivo de configuración de compilación de ejemplo para compilar y probar la aplicación con mvn.
- gradle-example: Es una app de Java y un archivo de configuración de compilación de ejemplo para compilar y probar la aplicación con gradle.
¿Qué sigue?
- Aprende a ver resultados de compilación.
- Obtén más información para proteger compilaciones.
- Aprende a compilar aplicaciones de Java independientes.
- Obtén más información sobre cómo implementar una aplicación en Cloud Run.
- Obtén más información sobre cómo implementar una aplicación en GKE.
- Obtén más información para solucionar errores de compilación.