En esta página se describe cómo configurar Cloud Build para compilar, probar, contenerizar y desplegar aplicaciones Python.
Cloud Build te permite usar cualquier imagen de contenedor disponible públicamente para ejecutar tus tareas de desarrollo, como compilar, probar, contenerizar, subir a Artifact Registry, desplegar y guardar tus registros de compilación. La imagen pública python
de Docker Hub viene con las herramientas python
y pip
preinstaladas. Puedes configurar Cloud Build para usar estas herramientas con el fin de instalar dependencias, compilar y ejecutar pruebas unitarias.
Antes de empezar
En las instrucciones de esta página se presupone que tienes conocimientos de Python. Además, también ocurre lo siguiente:
-
Enable the Cloud Build, Cloud Run, Cloud Storage and Artifact Registry APIs.
- Para ejecutar los comandos
gcloud
de esta página, instala Google Cloud CLI. - Ten a mano tu proyecto de Python, incluido el archivo
requirements.txt
. Necesitas unDockerfile
junto con tu código fuente. - Si quieres almacenar el contenedor compilado en Artifact Registry, crea un repositorio de Docker en Artifact Registry.
- Si quieres almacenar los registros de pruebas en Cloud Storage, crea un segmento en Cloud Storage.
Permisos de gestión de identidades y accesos necesarios
Para almacenar los registros de pruebas en Logging, asigna el rol Creador de objetos de Storage (
roles/storage.objectCreator
) a la cuenta de servicio de compilación del segmento de Cloud Storage.Para almacenar imágenes compiladas en Artifact Registry, concede el rol Escritor de Artifact Registry (
roles/artifactregistry.writer
) a tu cuenta de servicio de compilación.
Para obtener instrucciones sobre cómo conceder estos roles, consulta el artículo Conceder un rol mediante la página IAM.
Configurar compilaciones de Python
En esta sección se explica un archivo de configuración de compilación de ejemplo para una aplicación de Python. Incluye pasos de compilación para instalar requisitos, añadir pruebas unitarias y, una vez superadas las pruebas, compilar y desplegar la aplicación.
En el directorio raíz de tu proyecto, crea un archivo de configuración de Cloud Build llamado
cloudbuild.yaml
.Instala los requisitos: la imagen
python
de Docker Hub viene conpip
preinstalado. Para instalar las dependencias depip
, añade un paso de compilación con los siguientes campos:name
: asigna el valorpython
a este campo para usar la imagen de Python de Docker Hub en esta tarea.entrypoint
: al definir este campo, se anula el punto de entrada predeterminado de la imagen a la que se hace referencia enname
. Asigna el valorpip
a este campo para invocarpip
como punto de entrada del paso de compilación y ejecuta los comandospip
.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
. Introduce los argumentos para ejecutar el comandopip install
en este campo. La marca--user
del comandopip install
asegura que los pasos de compilación posteriores puedan acceder a los módulos instalados en este paso de compilación.
El siguiente paso de compilación añade argumentos para instalar los requisitos del archivo
requirements.txt
:Añadir pruebas unitarias: si has definido pruebas unitarias en tu aplicación mediante un framework de pruebas como
pytest
, puedes configurar Cloud Build para que ejecute las pruebas añadiendo los siguientes campos en un paso de compilación:name
: asigna el valorpython
a este campo para usar la imagen de Python de Docker Hub en tu tarea.entrypoint
: asigna el valorpython
a este campo para ejecutar comandospython
.args
: añade los argumentos para ejecutar el comandopython pytest
.
El siguiente paso de compilación guarda la salida del registro
pytest
en un archivo XML de JUNIT. El nombre de este archivo se crea a partir de la versión corta del ID de la confirmación asociada a tu compilación. En un paso de compilación posterior, se guardarán los registros de este archivo en Cloud Storage.Conteneriza la aplicación: después de añadir el paso de compilación para asegurarte de que se han superado las pruebas, puedes compilar la aplicación. Cloud Build proporciona una imagen Docker prediseñada que puedes usar para contenerizar tu aplicación Python. Para contenedorizar tu aplicación, añade los siguientes campos en un paso de compilación:
name
: asigna el valorgcr.io/cloud-builders/docker
a este campo para usar la imagen de Docker precompilada en tu tarea.args
: añade los argumentos del comandodocker build
como valores de este campo.
El siguiente paso de compilación crea la imagen
myimage
y la etiqueta con la versión corta del ID de confirmación. El paso de compilación usa las sustituciones predeterminadas para el ID del proyecto, el nombre del repositorio y los valores SHA cortos, por lo que estos valores se sustituyen automáticamente en el momento de la compilación.Envía el contenedor a Artifact Registry: puedes almacenar el contenedor creado en Artifact Registry, que es un Google Cloud servicio que puedes usar para almacenar, gestionar y proteger artefactos de compilación. Para ello, debe tener un repositorio de Docker en Artifact Registry. Para configurar Cloud Build de forma que almacene la imagen en un repositorio de Docker de Artifact Registry, añade un paso de compilación con los siguientes campos:
name
: asigna el valorgcr.io/cloud-builders/docker
a este campo para usar la imagen oficial del compiladordocker
en tu tarea.args
: añade los argumentos del comandodocker push
como valores de este campo. En la URL de destino, introduce el repositorio Docker de Artifact Registry en el que quieras almacenar la imagen.
El siguiente paso de compilación envía la imagen que has compilado en el paso anterior a Artifact Registry:
Opcional: Si quieres que Cloud Build genere información de procedencia de compilación de niveles de la cadena de suministro para artefactos de software (SLSA), haz lo siguiente:
- Usa el campo
images
en el paso de compilación en lugar de usar un paso de compilaciónDocker push
independiente. - Añade
requestedVerifyOption: VERIFIED
a la secciónoptions
de tu archivo de configuración de compilación.
Despliega el contenedor en Cloud Run: para desplegar la imagen en Cloud Run, añade un paso de compilación con los siguientes campos:
name
: asigna el valorgoogle/cloud-sdk
a este campo para usar la imagen de la CLI de gcloud para invocar el comandogcloud
y desplegar la imagen en Cloud Run.args
: añade los argumentos del comandogcloud run deploy
como valores de este campo.
El siguiente paso de compilación despliega la imagen compilada anteriormente en Cloud Run:
Guardar registros de pruebas en Cloud Storage: puedes configurar Cloud Build para que almacene los registros de pruebas en Cloud Storage. Para ello, especifica la ubicación de un segmento y la ruta de los registros de pruebas. El siguiente paso de compilación almacena los registros de prueba que has guardado en el archivo XML de JUNIT en un segmento de Cloud Storage:
En el siguiente fragmento se muestra el archivo de configuración de compilación completo con todos los pasos descritos anteriormente:
Inicia la compilación: manualmente o con activadores de compilación.
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.
Siguientes pasos
- Consulta cómo ver los resultados de las compilaciones.
- Consulta cómo proteger las compilaciones.
- Consulta cómo crear aplicaciones Python independientes.
- Consulta cómo usar dependencias privadas.
- Consulta cómo solucionar errores de compilación.