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
- Tener experiencia en 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.
- Familiarízate con cómo escribir un archivo de configuración de Cloud Build.
- Para ejecutar los comandos gcloudde esta página, instala la CLI de Google Cloud.
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- maveno- maven:<tag>a este campo, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usará la imagen- latestde 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- mvna este campo para invocar- mvncomo punto de entrada del paso de compilación y ejecutar comandos- mvn.
- args: el campo- argsde 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- gradleo- gradle:<tag>a este campo, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usará la imagen- latestde 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- gradlea este campo para invocar- gradlecomo punto de entrada del paso de compilación y ejecutar comandos- gradle.
- args: el campo- argsde 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
- En el directorio raíz de tu proyecto, crea un archivo de configuración de compilación llamado - cloudbuild.yaml.
- Ejecutar pruebas: - maveny- gradleproporcionan- maven testy- gradle test, que descarga las dependencias, compila las aplicaciones y ejecuta las pruebas especificadas en el código fuente. El campo- argsde 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 - testal campo- argspara invocar- testen- 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']
- Empaquetar aplicación: para empaquetar tu aplicación en un archivo JAR para tu imagen - maven, especifica el comando- packageen el campo- args. El comando- packagecrea un archivo JAR en- /workspace/target/.- Para empaquetar tu aplicación en un archivo JAR para tu imagen de - gradle, especifica el comando- assembleen el campo- args. El comando- assemblecrea 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']
- 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 namey especifica la imagen de Docker prediseñada engcr.io/cloud-builders/docker.
- Añade un campo argsy especifica los argumentos debuild, 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 imagespara enviar la imagen de contenedor compilada a Artifact Registry.
- Opcional: Añade - requestedVerifyOption: VERIFIEDen el campo- optionsde 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.
 
- Añade un campo 
- 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. 
- 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 
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
- Consulta cómo ver los resultados de las compilaciones.
- Consulta cómo proteger las compilaciones.
- Consulta cómo compilar aplicaciones Java independientes.
- Consulta cómo desplegar una aplicación en Cloud Run.
- Consulta cómo desplegar una aplicación en GKE.
- Consulta cómo solucionar errores de compilación.