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
gcloud
de 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 valormaven
omaven:<tag>
a este campo, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usará la imagenlatest
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 enname
. Asigna el valormvn
a este campo para invocarmvn
como punto de entrada del paso de compilación y ejecutar comandosmvn
.args
: el campoargs
de un paso de compilación toma una lista de argumentos y los transfiere a la imagen a la que hace referencia el camponame
.
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 valorgradle
ogradle:<tag>
a este campo, donde la etiqueta representa la versión. Si no especificas la etiqueta de imagen, Cloud Build usará la imagenlatest
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 enname
. Asigna el valorgradle
a este campo para invocargradle
como punto de entrada del paso de compilación y ejecutar comandosgradle
.args
: el campoargs
de un paso de compilación toma una lista de argumentos y los transfiere a la imagen a la que hace referencia el camponame
.
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:
maven
ygradle
proporcionanmaven test
ygradle test
, que descarga las dependencias, compila las aplicaciones y ejecuta las pruebas especificadas en el código fuente. El campoargs
de un paso de compilación toma una lista de argumentos y los pasa a la imagen a la que hace referencia el camponame
.En el archivo de configuración de compilación, añade
test
al campoargs
para invocartest
enmaven
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']
Empaquetar aplicación: para empaquetar tu aplicación en un archivo JAR para tu imagen
maven
, especifica el comandopackage
en el campoargs
. El comandopackage
crea un archivo JAR en/workspace/target/
.Para empaquetar tu aplicación en un archivo JAR para tu imagen de
gradle
, especifica el comandoassemble
en el campoargs
. El comandoassemble
crea un archivo JAR enworkspace/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
name
y especifica la imagen de Docker prediseñada engcr.io/cloud-builders/docker
. - Añade un campo
args
y 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
images
para enviar la imagen de contenedor compilada a Artifact Registry. Opcional: Añade
requestedVerifyOption: VERIFIED
en el campooptions
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.
- 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.