En esta página, se explica cómo usar Cloud Build para compilar, probar y alojar en contenedores aplicaciones basadas en Java, subir tus imágenes de contenedor a Artifact Registry y generar la procedencia de las compilaciones.
Antes de comenzar
- Familiarízate con la creación de aplicaciones basadas en Java.
- Ten listo tu proyecto de Java, incluido un
Dockerfile
. - Ten un repositorio de Docker en Artifact Registry o crea un repositorio nuevo.
- Familiarízate con la escritura de un archivo de configuración de Cloud Build.
- Para ejecutar los comandos de
gcloud
en esta página, instala los Google Cloud CLI.
Usa las imágenes de maven
o gradle
Puedes configurar Cloud Build para compilar aplicaciones de Java con el
Imagen maven
o la imagen gradle
desde Docker Hub.
Para ejecutar tus tareas en las imágenes de maven
o gradle
, especifica la URL de la imagen y la versión etiquetada de la imagen en el campo name
del archivo de configuración de compilación. Si no especificas la etiqueta de imagen, Cloud Build usa la imagen latest
de forma predeterminada. Cloud Build inicia la imagen especificada en name
mediante el punto de entrada predeterminado de la imagen. Para anular el punto de entrada predeterminado y para invocar maven
o gradle
como un punto de entrada, especifica mvn
o gradle
en el campo entrypoint
.
En el siguiente archivo de configuración de compilación, se especifica el entrypoint
de las imágenes de maven
o gradle
y se muestra la versión de la herramienta de compilación:
maven
steps:
- name: maven:3.3-jdk-8
entrypoint: mvn
args: ['--version']
gradle
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:
maven
ygradle
proporcionanmaven test
ygradle test
, que descargan dependencias, compilan las aplicaciones y ejecutan las pruebas especificadas en el código fuente. En el campoargs
de 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 camponame
.En el archivo de configuración de compilación, agrega
test
al campoargs
para invocartest
dentro demaven
ygradle
: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 comandopackage
en el campoargs
. El comandopackage
compila 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 comandoassemble
en el campoargs
. El comandoassemble
compila un archivo JAR enworkspace/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']
Alojar la aplicación en contenedores: Cloud Build proporciona un imagen de Docker compilada previamente que puedes usar para alojar tu aplicación de Java en contenedores. Para alojar tus aplicación de Java en tu archivo de configuración de compilación:
- Agrega un campo
name
y especifica la imagen de Docker compilada previamente engcr.io/cloud-builders/docker
- Agrega un campo
args
y especifica los argumentosbuild
, incluido el nombre de la imagen de contenedor que se compilará y la ruta de acceso al artefacto de compilación. - Agrega un campo
images
para enviar la imagen de contenedor compilada a Artifact Registry. Opcional: Agrega
requestedVerifyOption: VERIFIED
en el campooptions
de tu archivo de configuración de compilación para habilitar Niveles de la cadena de suministro para artefactos de software (SLSA) la generación de procedencias.
En el siguiente paso de compilación, se crean contenedores para la aplicación y se envía el contenedor imagen 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']
Aquí:
- location: Es la ubicación regional o multirregional de tu repositorio.
- project-id: El ID del proyecto de Google Cloud.
- 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.Cuando se complete la compilación, podrás 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: 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 sobre cómo 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.