CI/CD

Las canalizaciones de integración e implementación continuas (CI/CD) permiten garantizar que tus funciones operen de forma local y en entornos de pruebas de Google Cloud.

Una vez que termines de desarrollar funciones a nivel local, puedes configurar una plataforma de CI/CD como Cloud Build para ejecutar tus pruebas existentes de Cloud Functions de forma continua. Las pruebas continuas ayudan a garantizar que tu código siga funcionando como se prevé y que tus dependencias permanezcan actualizadas. Como las funciones de Cloud Functions no se actualizan automáticamente, también puedes configurar las canalizaciones de IC/EC (incluidas las creadas sobre Cloud Build) para probar y volver a implementar automáticamente tus funciones desde un repositorio de código fuente, como GitHub, Bitbucket o Cloud Source Repositories.

Antes de comenzar

Antes de comenzar con esta guía, configura tu entorno.

Frameworks de pruebas

Los frameworks de pruebas proporcionan un entorno de ejecución para las pruebas automatizadas, que te permiten mantener implementaciones de producción completamente probadas con muy poco esfuerzo por implementación. Los marcos de trabajo de simulación te permiten simular dependencias externas. Una dependencia externa es aquella necesaria para la función, pero que no forma parte del código de esta.

Node.js

En los ejemplos de esta guía, se usa Mocha como un framework para pruebas a fin de ejecutar pruebas y Sinon como un framework de simulación de dependencias externas.

Una dependencia externa es aquella necesaria para la función, pero que no forma parte del código de esta. Algunos ejemplos comunes de dependencias externas son otros servicios y bibliotecas de Google Cloud instalados con administradores de paquetes como npm, PyPI o Maven.

Python

En los ejemplos de esta guía, se usa Pytest como un framework de prueba para ejecutar pruebas y unittest como un framework de simulación de dependencias externas.

Una dependencia externa es aquella necesaria para la función, pero que no forma parte del código de esta. Algunos ejemplos comunes de dependencias externas son otros servicios y bibliotecas de Google Cloud instalados con administradores de paquetes como pip.

Go

En los ejemplos de esta guía, se usa el paquete testing de la biblioteca estándar para ejecutar las pruebas. Sin embargo, las pruebas del sistema tienen dependencias externas.

Una dependencia externa es aquella necesaria para la función, pero que no forma parte del código de esta. Algunos ejemplos comunes de dependencias externas son otros servicios de Google Cloud y otros paquetes descargados.

Java

En los ejemplos de esta guía, se usa la biblioteca JUnit para ejecutar pruebas y Mockito como framework de simulación de dependencias externas.

Una dependencia externa es aquella necesaria para la función, pero que no forma parte del código de esta.

Configura Cloud Build

Sigue las instrucciones en la guía Automatiza compilaciones con activadores de compilación mediante el uso del archivo de configuración de compilación cloudbuild.yaml que aparece a continuación para configurar Cloud Build a fin de probar y, luego, implementar tu función de forma automática.

Node.js

steps:
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/npm'
  args: ['test']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', '[YOUR_RUNTIME]', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Python

steps:
- name: 'docker.io/library/python:3.10'
  entrypoint: /bin/sh
  # Run pip install and pytest in the same build step
  # (pip packages won't be preserved in future steps!)
  args: [-c, 'pip install -r requirements.txt && pytest']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'python37', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Go

steps:
- name: golang
  args: ['go', 'version']
- name: golang
  args: ['go', 'test']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'go116', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Java

steps:
- name: 'gcr.io/cloud-builders/mvn'
  args: ['clean', 'verify']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'java11', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Reemplaza lo siguiente:

  • [YOUR_DEPLOYED_FUNCTION_NAME] por el nombre de las Cloud Functions que se usarán en Google Cloud Console, Google Cloud CLI y la URL
  • [YOUR_FUNCTION_TRIGGER] por el valor del activador apropiado, como --trigger-http
  • [YOUR_RUNTIME] por el identificador del entorno de ejecución, como nodejs10
  • [YOUR_FUNCTION_NAME_IN_CODE] por el nombre de la función tal como aparece en el código. --entry-point solo es necesario si el valor no es igual a [YOUR_DEPLOYED_FUNCTION_NAME]
  • function/dir/from/repo/root por la ruta del directorio que contiene la función

Otorga permisos para ejecutar implementaciones y compilaciones

Si usas Cloud Build para implementar Cloud Functions, debes otorgarle permisos a la cuenta de servicio de Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com). Esta cuenta se usa para ejecutar compilaciones en tu nombre.

  1. Busca el número de tu proyecto:

    gcloud projects describe PROJECT_ID
    

    Consulta Crea y administra proyectos para aprender a identificar tu proyecto.

  2. Permite que la cuenta de servicio de Cloud Build funcione como cuenta de servicio del entorno de ejecución de Cloud Functions:

    gcloud iam service-accounts add-iam-policy-binding PROJECT_ID@appspot.gserviceaccount.com \
     --member serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
     --role roles/iam.serviceAccountUser
    
  3. Asigna la función de desarrollador de Cloud Functions a la cuenta de servicio de Cloud Build para permitir que Cloud Build implemente Cloud Functions:

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
     --role roles/cloudfunctions.developer
    

Para obtener más información, consulta las funciones de IAM de Cloud Functions.

De ahora en adelante, cada vez que hagas envíos al repositorio con Cloud Build habilitado, se ejecutarán los pasos indicados en el archivo cloudbuild.yaml.