IC/EC

Las canalizaciones de integración y de implementación continuas (IC/EC) ayudan a garantizar que tus funciones sirvan tanto localmente como en un entorno de prueba en Google Cloud.

En esta guía, se explica cómo configurar una canalización de IC/EC con Cloud Build para ejecutar tus pruebas de Cloud Functions existentes de forma continua.

Una vez que termines de desarrollar funciones localmente, puedes configurar una plataforma de IC/EC, 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.

Marcos de trabajo de prueba

Los marcos de trabajo de prueba proporcionan un entorno de ejecución para 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 una dependencia en la que se basa tu función, que no forma parte del código de esta.

Node.js

En los ejemplos de esta guía, se usan Mocha como un marco de trabajo para pruebas, a fin de ejecutar pruebas, y Sinon como un simulador de marcos de trabajo para simular dependencias externas.

Una dependencia externa es una dependencia en la que se basa tu función, que no forma parte del código de esta. Algunos ejemplos comunes de dependencias externas son otros servicios de Google Cloud y bibliotecas instaladas con administradores de paquetes como npm, PyPI o Maven.

Python

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

Una dependencia externa es una dependencia en la que se basa tu función, 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 una dependencia en la que se basa tu función, que no forma parte del código de esta. Algunos ejemplos comunes de dependencias externas son otros servicios de Google Cloud y otros paquetes que hayas descargado.

Configura Cloud Build

Sigue las instrucciones de la guía Automatiza compilaciones con activadores de compilación con el archivo de configuración de la compilación cloudbuild.yaml que aparece a continuación para configurar Cloud Build a fin de probar e implementar tu función automáticamente.

Node.js

steps:
    - name: 'gcr.io/cloud-builders/yarn'
      args: ['install']
      dir: 'functions/autodeploy'
    - name: 'gcr.io/cloud-builders/npm'
      args: ['test']
      dir: 'functions/autodeploy'
    - 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: 'functions/autodeploy'
    

Go

steps:
      - name: 'mirror.gcr.io/library/golang'
        args: ['go', 'version']
      - name: 'mirror.gcr.io/library/golang'
        args: ['go', 'test']
        dir: 'functions/autodeploy'
      - 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: 'functions/autodeploy'

Reemplaza lo siguiente:

  • [YOUR_FUNCTION_NAME] por el nombre de tus funciones de Cloud Functions que se usarán en Google Cloud Console, el SDK de Cloud 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 este valor es diferente de [YOUR_FUNCTION_NAME].

Si Cloud Build no se ajusta a tus necesidades, consulta esta lista de plataformas de integración continua.

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 tu número de proyecto:

        gcloud projects describe PROJECT_ID
        

    Para obtener más información sobre cómo identificar tu proyecto, consulta la sección Crea y administra proyectos.

  2. Permite que la cuenta de servicio de Cloud Build actúe como la 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, lo que permite 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 Funciones de IAM de Cloud Functions.

Ahora, siempre que envíes cambios al repositorio con Cloud Build habilitado, se ejecutarán los pasos en el archivo cloudbuild.yaml.