Compila y prueba aplicaciones de Python

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 origen 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:

  • Habilita las API de Cloud Build, Artifact Registry, and Cloud Storage.

    Habilita las API

  • Para ejecutar los comandos de gcloud en esta página, instala Google Cloud CLI.
  • Ten tu proyecto de Python a mano.
  • Tener un repositorio de Python en Artifact Registry Crea un repositorio nuevo si no tienes uno.
  • Si deseas almacenar registros de prueba en Cloud Storage, crea un bucket en Cloud Storage.

Permisos de IAM obligatorios

Para obtener instrucciones sobre cómo otorgar estas funciones, consulta Otorga una función con la página 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.

  1. En el directorio raíz del proyecto, crea un archivo de configuración de compilación llamado cloudbuild.yaml.

  2. Requisitos de instalación: La imagen python de Docker Hub viene preinstalada con pip. Para instalar dependencias desde pip, agrega un paso de compilación con los siguientes campos:

    • name: Establece el valor de este campo en python o python:<tag> para usar la imagen de Python de Docker Hub en esta tarea. Si deseas 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 en name. Configura el valor de este campo como pip para invocar a pip como el punto de entrada del paso de compilación y ejecuta los comandos de pip.
    • args: En el campo args 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 campo name. Pasa los argumentos para ejecutar el comando pip install en este campo. La marca --user en el comando pip 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 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']
    
  3. 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 como python para usar la imagen de Python de Docker Hub en tu tarea.
    • entrypoint: Configura el valor de este campo como python para ejecutar los comandos de python.
    • args: Agrega los argumentos para ejecutar el comando python 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']
    
  4. 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 como python para usar la imagen de Python de Docker Hub en tu tarea.
    • entrypoint: Configura el valor de este campo como python para ejecutar los comandos de python.
    • args: Agrega los argumentos para ejecutar tu compilación.

    Con el siguiente paso de compilación, se inicia la compilación:

        - name: 'python'
          entrypoint: 'python'
          args: ['-m', 'build']
    
  5. Sube el archivo a Artifact Registry:

    Cloud Build genera información de procedencia de compilación de niveles de cadena de suministro para artefactos de software (SLSA) para paquetes independientes de Python cuando subes artefactos a Artifact Registry con los campos python_packages disponibles en el archivo de configuración de Cloud Build.

    En el archivo de configuración, agrega el campo pythonPackages y especifica el 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.
  6. Opcional: Habilita la procedencia para las compilaciones regionales

    Si usas una compilación regional, agrega el campo requestedVerifyOption a options en tu archivo de configuración de compilación. Establece el valor en VERIFIED para habilitar la generación de metadatos de origen. Si no agregas requestedVerifyOption: VERIFIED, Cloud Build solo genera la procedencia de las compilaciones globales.

    options:
      requestedVerifyOption: VERIFIED
    
  7. 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'
    
  8. Inicia tu compilación: de forma manual o con activadores de compilación.

    Una vez que se complete la compilación, podrás ver los detalles del repositorio en Artifact Registry.

    También puedes ver los metadatos de origen de la compilación y validar la fuente para ayudar a proteger la cadena de suministro de software.

¿Qué sigue?