En esta página, se describe cómo configurar Cloud Build para compilar y probar tus aplicaciones de Python, subir tus artefactos a Artifact Registry, generar información de procedencia y guardar tus registros de prueba en Cloud Storage.
Cloud Build permite usar cualquier imagen de contenedor disponible a nivel público para ejecutar tareas. La imagen python
de Docker Hub pública viene preinstalada con las herramientas de python
y pip
. Puedes configurar Cloud Build para usar estas herramientas a fin de instalar dependencias, compilar y ejecutar pruebas de unidades con estas herramientas.
Antes de comenzar
En las instrucciones de esta página, suponemos que estás familiarizado con Python. Además, tenga en cuenta lo siguiente:
-
Enable the Cloud Build, Artifact Registry, and Cloud Storage APIs.
- Para ejecutar los comandos de
gcloud
de esta página, instala Google Cloud CLI. - Ten tu proyecto de Python a mano.
- Tener un repositorio de Python en Artifact Registry Si no tienes uno, crea un repositorio nuevo.
- Si deseas almacenar registros de prueba en Cloud Storage, crea un bucket en Cloud Storage.
Permisos de IAM obligatorios
Para almacenar registros de pruebas en Logging, otorga el permiso Creador de objetos de almacenamiento (
roles/storage.objectCreator
) para el bucket de Cloud Storage a tu cuenta de servicio de compilación.Para almacenar imágenes compiladas en Artifact Registry, otorga el rol Escritor de Artifact Registry Rol (
roles/artifactregistry.writer
) a la cuenta de servicio de compilación.
Para obtener instrucciones sobre cómo otorgar estos roles, consulta Otorga una función mediante la página de IAM.
Configura compilaciones de Python
En esta sección, se explica un ejemplo de archivo de configuración de compilación para una app de Python. Tiene pasos de compilación para instalar requisitos, agregar pruebas de unidades y, luego de pasar las pruebas, compilar e implementar la app.
En el directorio raíz del proyecto, crea un archivo de configuración de compilación llamado
cloudbuild.yaml
.Requisitos de instalación: La imagen
python
de Docker Hub viene preinstalada conpip
. Para instalar dependencias desdepip
, agrega un paso de compilación con los siguientes campos:name
: Establece el valor de este campo enpython
opython:<tag>
para usar la imagen de Python de Docker Hub para esta tarea. Cómo ver una lista de etiquetas disponibles Para otras imágenes de Python, consulta la referencia de Docker Hub para la imagen de Python.entrypoint
: Si configuras este campo, se anula el punto de entrada predeterminado de la imagen a la que se hace referencia enname
. Configura el valor de este campo comopip
para invocar apip
como el punto de entrada del paso de compilación y ejecuta los comandos depip
.args
: 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
. Pasa los argumentos para ejecutar el comandopip install
en este campo. La marca--user
en el comandopip install
garantiza que los pasos de compilación posteriores puedan acceder a los módulos instalados en este paso de compilación.
En el siguiente paso de compilación, se agregan argumentos a los requisitos de instalación:
steps: - name: 'python' entrypoint: 'python' args: ['-m', 'pip', 'install', '--upgrade', 'pip'] - name: python entrypoint: python args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
Agrega pruebas de unidades: Si definiste pruebas de unidades en tu aplicación con un framework de pruebas, como
pytest
, puedes configurar Cloud Build a fin de ejecutar las pruebas. Para ello, agrega los siguientes campos en un paso de compilación:name
: Configura el valor de este campo comopython
para usar la imagen de Python de Docker Hub en tu tarea.entrypoint
: Configura el valor de este campo comopython
para ejecutar los comandos depython
.args
: Agrega los argumentos para ejecutar el comandopython pytest
.
En el siguiente paso de compilación, se guarda el resultado del registro
pytest
en un archivo XML JUNIT. El nombre de este archivo se construye con$SHORT_SHA
, la versión corta del ID de confirmación asociado con tu compilación. Los pasos de compilación posteriores 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 tu archivo de configuración de compilación, define el compilador y el
args
para compilar tu aplicación:name
: Configura el valor de este campo comopython
para usar la imagen de Python de Docker Hub en tu tarea.entrypoint
: Configura el valor de este campo comopython
para ejecutar los comandos depython
.args
: Agrega los argumentos para ejecutar tu compilación.
El siguiente paso de compilación inicia la compilación:
- name: 'python' entrypoint: 'python' args: ['-m', 'build']
Sube el archivo a Artifact Registry:
En tu archivo de configuración, agrega el campo
pythonPackages
y especifica tu repositorio de Python en Artifact Registry:artifacts: pythonPackages: - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY' paths: ['dist/*']
Reemplaza los siguientes valores:
- PROJECT-ID es el ID del proyecto de Google Cloud que contiene tu repositorio de Artifact Registry.
- REPOSITORY es el ID del repositorio.
- LOCATION es la ubicación regional o multirregional del repositorio.
Opcional: Habilita la generación de procedencia
Cloud Build puede generar modelos de Compilación de Niveles de cadena de suministro para artefactos de software (SLSA) metadatos de procedencia para ayudar a proteger tu canalización de integración continua.
Para habilitar la generación de procedencia, agrega
requestedVerifyOption: VERIFIED
a la secciónoptions
en tu archivo de configuración.Guardar registros de prueba en Cloud Storage: Puedes configurar Cloud Build para almacenar cualquier registro de prueba en Cloud Storage si especificas una ubicación de bucket existente y una ruta de acceso a los registros de prueba. En el siguiente paso de compilación, se almacenan los registros de prueba que guardaste en el archivo XML JUNIT en un bucket de Cloud Storage:
artifacts: objects: location: 'gs://${_BUCKET_NAME}/' paths: - '${SHORT_SHA}_test_log.xml'
Inicia la compilación: de forma manual o con activadores de compilación.
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.
¿Qué sigue?
- Aprende a ver resultados de compilación.
- Obtén más información sobre cómo proteger compilaciones.
- Obtén más información sobre cómo compilar y alojar en contenedores aplicaciones de Python.
- Obtén más información sobre cómo usar dependencias privadas.
- Aprende a realizar implementaciones azul-verde en Compute Engine.
- Obtén más información para solucionar errores de compilación.