En esta página, se describe cómo configurar Cloud Build para compilar, probar, organizar en contenedores e implementar aplicaciones de Python.
Cloud Build te permite usar cualquier imagen de contenedor disponible a nivel público para ejecutar tus tareas de desarrollo, incluidas la compilación, la prueba, la organización en contenedores, la carga en Artifact Registry, la implementación y el guardado de tus registros de compilación. La imagen pública
python de Docker Hub
viene preinstalada con python y pip herramientas. 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 APIs de Cloud Build, Cloud Run, Cloud Storage y Artifact Registry.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol Propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol Administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén información para otorgar roles. - Para ejecutar los comandos de
gcloudde esta página, instala Google Cloud CLI. - Ten el proyecto de Python a mano, incluido el archivo
requirements.txt. Necesitas unDockerfilejunto con tu código fuente. - Si deseas almacenar el contenedor compilado en Artifact Registry, crea un repositorio de Docker en Artifact Registry.
- Si deseas almacenar registros de prueba en Cloud Storage, crea un bucket en Cloud Storage.
Permisos de IAM obligatorios
Para almacenar registros de prueba en Logging, otorga el rol creador de objetos de almacenamiento (
roles/storage.objectCreator) en 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 (
roles/artifactregistry.writer) a tu cuenta de servicio de compilación.
Para obtener instrucciones sobre cómo otorgar estos roles, consulta Cómo otorgar un rol con 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
pythonde Docker Hub viene preinstalada conpip. Para instalar dependencias desdepip, agrega un paso de compilación con los siguientes campos:name: Configura el valor de este campo enpythona fin de usar la imagen de Python desde Docker Hub para esta tarea.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 comopippara invocar apipcomo el punto de entrada del paso de compilación y ejecuta los comandos depip.args: En el campoargsde 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 installen este campo. La marca--useren el comandopip installgarantiza 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 fin de instalar los requisitos del archivo
requirements.txt: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 comopythonpara usar la imagen de Python de Docker Hub en tu tarea.entrypoint: Configura el valor de este campo comopythonpara 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
pytesten un archivo XML JUNIT. El nombre de este archivo se construye con 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.Crea contenedores en la app: Después de agregar el paso de compilación a fin de garantizar que las pruebas se hayan aprobado, puedes compilar la aplicación. Cloud Build proporciona una imagen de Docker compilada con anterioridad que puedes usar para organizar tu aplicación de Python en contenedores. Para organizar tu app en contenedores, agrega los siguientes campos en un paso de compilación:
name: Configura el valor de este campo engcr.io/cloud-builders/dockerpara usar la imagen de Docker compilada previamente para tu tarea.args: Agrega los argumentos para el comandodocker buildcomo valores para este campo.
En el siguiente paso de compilación, se compila la imagen
myimagey se etiqueta con la versión corta de tu ID de confirmación. En el paso de compilación, se usan las sustituciones predeterminadas para el ID del proyecto, el nombre del repositorio y los valores cortos de SHA, por lo que estos valores se sustituyen de forma automática durante el tiempo de compilación.Envía el contenedor a Artifact Registry: Puedes almacenar el contenedor compilado en Artifact Registry, que es un Google Cloud servicio que puedes usar para almacenar, administrar y proteger artefactos de compilación. Para hacer esto, deberás tener un repositorio de Docker existente en Artifact Registry. Para configurar Cloud Build a fin de almacenar la imagen en un repositorio de Docker de Artifact Registry, agrega un paso de compilación con los siguientes campos:
name: Configura el valor de este campo engcr.io/cloud-builders/dockerpara usar la imagen oficial del compiladordockerpara tu tarea.args: Agrega los argumentos para el comandodocker pushcomo valores de este campo. Para la URL de destino, ingresa el repositorio de Docker de Artifact Registry en el que deseas almacenar la imagen.
En el siguiente paso de compilación, se envía la imagen que compilaste en el paso anterior a Artifact Registry:
Opcional: Si deseas que Cloud Build genere información de procedencia de compilación de los Niveles de la cadena de suministro para artefactos de software (SLSA), completa lo siguiente:
- Usa el campo
imagesen tu paso de compilación en lugar de usar un paso de compilaciónDocker pushindependiente. - Agrega
requestedVerifyOption: VERIFIEDa la secciónoptionsde tu archivo de configuración de compilación.
Implementa el contenedor en Cloud Run: Para implementar la imagen en Cloud Run, agrega un paso de compilación con los siguientes campos:
name: Configura el valor de este campo engoogle/cloud-sdkpara usar la imagen de la gcloud CLI a fin de invocar el comandogcloudpara implementar la imagen en Cloud Run.args: Agrega los argumentos para el comandogcloud run deploycomo los valores de este campo.
En el siguiente paso de compilación, se implementa la imagen compilada con anterioridad en Cloud Run:
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:
En el siguiente fragmento, se muestra el archivo de configuración de compilación completo para todos los pasos descritos antes:
Inicia la 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 procedencia de la compilación y validar la procedencia.
¿Qué sigue?
- Aprende a ver resultados de compilación.
- Aprende a proteger las compilaciones.
- Aprende a compilar aplicaciones independientes de Python.
- Aprende a usar dependencias privadas.
- Obtén más información para solucionar errores de compilación.