En esta página se describe cómo configurar Cloud Build para compilar y probar tus aplicaciones Python, subir tus artefactos a Artifact Registry, generar información de procedencia y guardar tus registros de pruebas en Cloud Storage.
Cloud Build te permite usar cualquier imagen de contenedor disponible públicamente para ejecutar tus tareas. 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, Artifact Registry, and Cloud Storage APIs.
- Para ejecutar los comandos
gcloud
de esta página, instala Google Cloud CLI. - Ten a mano tu proyecto de Python.
- Tener un repositorio de Python en Artifact Registry. Si no tienes uno, crea un repositorio.
- 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 gestionar los requisitos de instalación, 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
opython:<tag>
a este campo para usar la imagen de Python de Docker Hub en esta tarea. Para ver una lista de las etiquetas disponibles de otras imágenes de Python, consulta la referencia de Docker Hub para la imagen de Python.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:
steps: - name: 'python' entrypoint: 'python' args: ['-m', 'pip', 'install', '--upgrade', 'pip'] - name: python entrypoint: python args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
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 con$SHORT_SHA
, 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.- name: 'python' entrypoint: 'python' args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
Compilación: en el archivo de configuración de compilación, define el compilador y el
args
para compilar la aplicació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 la compilación.
El siguiente paso de compilación inicia la compilación:
- name: 'python' entrypoint: 'python' args: ['-m', 'build']
Subir a Artifact Registry:
En el archivo de configuración, añada el campo
pythonPackages
y especifique su repositorio de Python en Artifact Registry:artifacts: pythonPackages: - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY' paths: ['dist/*']
Sustituye los siguientes valores:
- PROJECT-ID es el ID del proyecto que contiene tu repositorio de Artifact Registry. Google Cloud
- REPOSITORY es el ID del repositorio.
- LOCATION es la ubicación regional o multirregional del repositorio.
Opcional: Habilitar la generación de procedencia
Cloud Build puede generar metadatos de procedencia de compilación verificables de niveles de la cadena de suministro para artefactos de software (SLSA) para proteger tu flujo de integración continua.
Para habilitar la generación de procedencia, añade
requestedVerifyOption: VERIFIED
a la secciónoptions
de tu archivo de configuración.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:
artifacts: objects: location: 'gs://${_BUCKET_NAME}/' paths: - '${SHORT_SHA}_test_log.xml'
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 compilar y contenerizar aplicaciones Python.
- Consulta cómo usar dependencias privadas.
- Consulta cómo realizar implementaciones azul/verde en Compute Engine.
- Consulta cómo solucionar errores de compilación.