Implementa la entrega continua con Travis CI y App Engine

Las pruebas son un aspecto importante de la creación de software. Para garantizar que las pruebas de unidades se ejecuten en cada compilación de un proyecto, muchas organizaciones de ingeniería adoptaron la integración continua (CI), que implica el uso de herramientas, como Jenkins o Travis CI, a fin de garantizar que todo el código nuevo se pruebe de forma automática y coherente en busca de errores. La entrega continua (CD) va un paso más allá, ya que garantiza que cada compilación se pueda implementar en un entorno similar al de producción y, luego, pasa las pruebas de integración en ese entorno. Puedes ejecutar pruebas de integración mediante un servicio de CI/CD en Google Cloud para implementar una app como parte del proceso de compilación.

Si bien en este artículo se analiza Travis CI, la mayoría de las ideas se aplican a otras herramientas de CI, como Jenkins. Travis se integra en GitHub y ejecuta pruebas de forma aislada. Lo mejor de este producto es que, cuando se ejecuta en Google Cloud, no es necesario que administres tu propia infraestructura.

Información sobre este instructivo

En este instructivo, se muestra una app de Flask en Python que se ejecuta en App Engine y que interactúa con la API de Google Libros. En la app, se muestra cómo Travis CI puede implementar y ejecutar pruebas de extremo a extremo en un entorno de etapa de pruebas como parte del proceso de prueba, que se activa mediante un comando git push. En el siguiente diagrama, se muestra una descripción general del proceso.

Travis CI ejecuta pruebas locales entre implementaciones GitHub y Google Cloud

Travis CI tiene compatibilidad integrada para la implementación en los entornos estándar o flexible de App Engine mediante el uso de proveedores de implementación. Cuando usas estos proveedores, algunos pasos básicos de configuración son los mismos, pero el archivo de configuración es más simple. En este instructivo, se demuestra lo que hacen estos proveedores. Travis CI descarga el SDK de Cloud, que también se puede usar con otros fines aparte de la implementación, como la ejecución de emuladores locales para las pruebas de unidades. Si bien en este instructivo se usa el proveedor de implementación de App Engine, consulta la documentación de Travis CI a fin de obtener más información sobre otros proveedores.

Se crean nuevas credenciales de cuenta de servicio y claves de API que solo debes usar para este instructivo. A fin de simplificar el instructivo, las claves encriptadas se suben a GitHub. Este es un antipatrón de seguridad que debes evitar en entornos de producción.

Objetivos

  • Configurar Cloud Shell para usar con GitHub
  • Configurar las cuentas de GitHub y Travis CI
  • Bifurcar el repositorio de código de muestra y habilitarlo en Travis
  • Crear una app de App Engine y crear credenciales de Travis CI.
  • Instalar las herramientas de línea de comandos de Travis
  • Actualizar el código de muestra de un proyecto y usar Travis para encriptar los secretos
  • Enviar un código nuevo a GitHub y hacer que Travis CI lo pruebe de forma automática en App Engine

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

  • App Engine

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las API de Compute Engine, Google Books, Cloud Build, and App Engine.

    Habilita las API

  5. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  7. Habilita las API de Compute Engine, Google Books, Cloud Build, and App Engine.

    Habilita las API

  8. Crea cuentas de GitHub y Travis CI.

Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.

Configura Cloud Shell para tu cuenta de GitHub

En la mayor parte de este instructivo, debes usar Cloud Shell, que incluye la confirmación de código en un repositorio de GitHub. GitHub solo permite confirmaciones mediante conexiones SSH; por lo tanto, Cloud Shell debe configurarse con claves SSH.

  1. En Cloud Console, haz clic en Activar Cloud Shell.

    IR A Cloud Shell

  2. Genera una nueva llave SSH.

  3. Agrega la nueva llave SSH a una cuenta de GitHub.

  4. Verifica que la llave SSH pueda comunicarse con GitHub.

Configura Travis CI con tu cuenta de GitHub

  1. En la página de Travis CI, accede con tu cuenta de GitHub.
  2. En la página Sign in to GitHub to continue to Travis CI, ingresa tus credenciales de GitHub y, luego, haz clic en Acceder.
  3. Haz clic en Authorize travis-pro.
  4. En la página Integración de apps de GitHub, haz clic en Activar.
  5. Haz clic en Aprobar y, luego, instalar.

Bifurca el repositorio de código de muestra

Debes bifurcar el repositorio en GitHub para reemplazar las credenciales del proyecto de muestra con las credenciales de tu propio proyecto.

  1. Ve al repositorio de código de muestra y haz clic en Fork.

    Repositorio de código de muestra en GitHub

  2. En Cloud Shell, configura el git config local.

    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    
  3. Clona el código de muestra. Reemplaza [YOUR-GITHUB-USERNAME] por tu nombre de usuario.

    git clone git@github.com:[YOUR-GITHUB-USERNAME]/continuous-deployment-demo.git
    

Verifica que la bifurcación esté en Travis CI

  1. En el sitio web de Travis CI, en la esquina superior derecha, haz clic en el nombre de usuario para abrir la configuración de la cuenta.

  2. En la pestaña Repositorios, haz clic en Activar.

  3. Haz clic en Solo repositorios seleccionados y selecciona el repositorio continuous-deployment-demo.

  4. Haz clic en el botón Aprobar y, luego, instalar.

    Es posible que se te solicite volver a ingresar tu credencial. Se mostrará el repositorio continuous-deployment-demo.

    Repositorios en Travis CI

    Ahora, cada vez que envías una confirmación a este repositorio, Travis CI ejecuta las pruebas configuradas y proporciona un informe detallado de los resultados de las pruebas.

Instala herramientas de línea de comandos de Travis

Crea una app de App Engine

  • En Cloud Shell, crea una app de App Engine. Reemplaza [REGION] por tu región de Google Cloud.

    gcloud app create --region=[REGION]
    

Crea las credenciales

Para implementar la app en tu proyecto de Google Cloud, debes crear dos tipos de credenciales:

  • Credenciales de cuenta de servicio, que permiten que el SDK de Cloud se autentique con el proyecto de Google Cloud.
  • Una clave de API pública que la app de App Engine usa para comunicarse con la API de Libros.

Crea una cuenta de servicio

  1. En Cloud Console, abre la página de cuentas de servicio de IAM.

    IR A LA PÁGINA DE CUENTAS DE SERVICIO DE IDENTITY

  2. Haz clic en Crear cuenta de servicio.

  3. Ingresa un nombre de cuenta de servicio, como continuous-integration-test.

  4. Haz clic en Crear y continuar.

  5. En el menú Selecciona una función, selecciona App Engine > Administrador de App Engine.

  6. Haz clic en + Agregar otra función y, luego, selecciona Cloud Storage > Administrador de almacenamiento.

  7. Haz clic en + Agregar otra función y, luego, selecciona Cloud Build > Editor de Cloud Build.

  8. Haga clic en Continuar.

  9. Haga clic en Listo.

  10. En la página de la cuenta de servicio, haz clic en Acciones para la cuenta de servicio continuous-integration-test.

  11. Haga clic en Administrar claves.

  12. Haz clic en Agregar clave > Crear nueva clave.

  13. En Tipo de clave, selecciona JSON.

  14. Haz clic en Crear. Cloud Console descarga un archivo JSON nuevo en tu computadora. El nombre de este archivo comienza con el ID del proyecto.

  15. Para subir este archivo a Cloud Shell, haz clic en Más y, luego, selecciona Subir archivo (Upload file).

    Botón Subir en Cloud Shell

  16. Cambia el nombre de este archivo y muévelo a la raíz del repositorio de GitHub.

    mv ~/<your_credentials_filename>.json ~/continuous-deployment-demo/client-secret.json
    

Crea la clave de API de Libros

  1. En Google Cloud Console, abre la página Credenciales de API.

    Ir a la página Credenciales

  2. Ve a Create credentials (Crear credenciales) > API key (Clave de API).

    Página Crear credenciales

  3. Se crea una clave de forma automática. Copia la clave de API y, luego, haz clic en Cerrar.

  4. En Cloud Shell, agrega la nueva clave de API al archivo api_key.py. Reemplaza [YOUR_API_KEY] con la clave de API que copiaste antes.

    export API_KEY=[YOUR_API_KEY]
    cd ~/continuous-deployment-demo
    echo "key = '${API_KEY}'" > api_key.py
    

Encripta las credenciales para que las use Travis CI

Estas credenciales se agregan a un repositorio público de GitHub y, por lo tanto, deben encriptarse.

Travis CI solo puede desencriptar un archivo. Crea un archivo tar que contenga las credenciales necesarias, encripta el archivo de forma local, agrega el archivo encriptado al repositorio de la app y configura Travis para que desencripte las credenciales durante el proceso de implementación. Si deseas obtener más información, consulta cómo encriptar archivos para Travis CI.

  1. En Cloud Shell, crea un archivo tar que contenga las credenciales necesarias:

    tar -czf credentials.tar.gz client-secret.json api_key.py
    
  2. Accede a Travis CI mediante las herramientas de línea de comandos de Travis CI:

    travis login --pro
    
  3. Cuando se te solicite completar la instalación de shell, ingresa Y y, luego, tus credenciales de GitHub. Si tienes habilitada la autenticación de varios factores en tu cuenta de GitHub, es posible que debas generar un token de acceso y usarlo para acceder.

  4. Encripta el archivo de credenciales:

    travis encrypt-file credentials.tar.gz --pro
    
  5. Cuando se te solicite reemplazar el archivo existente, ingresa yes.

  6. Copia la línea de resultado que comienza con openssl aes-256-cbc en el portapapeles.

    Resultado de la consola que comienza con “openssl”

  7. Configura Travis CI para desencriptar las credenciales mediante la actualización de .travis.yml con sed. Reemplaza [YOUR_COMMAND_OUTPUT] por el resultado de la consola que copiaste en el paso anterior.

    sed -i 's/DECRYPT_COMMAND/[YOUR_COMMAND_OUTPUT]/g' .travis.yml
    
  8. Edita el archivo .travis.yml y el archivo e2e_test.py para reflejar el nombre del proyecto:

    sed -i "s/continuous-deployment-python/${DEVSHELL_PROJECT_ID}/g" .travis.yml
    sed -i "s/continuous-deployment-python/${DEVSHELL_PROJECT_ID}/g" e2e_test.py
    
  9. Agrega el archivo encriptado de credenciales al repositorio:

    git add credentials.tar.gz.enc .travis.yml e2e_test.py
    git commit -m "Adds encrypted credentials for Travis and updates project name"
    

Confirma en GitHub y prueba con Travis CI

Ahora que configuraste la app de muestra para Travis CI y habilitaste Travis CI en la bifurcación del proyecto en GitHub, puedes enviar la última versión del código a fin de ver un ciclo de compilación y prueba.

git push origin master

Mientras se ejecuta la prueba, puedes ver el resultado de la compilación en tiempo real en el panel de Travis. Si las pruebas y la implementación en App Engine tienen éxito, el proceso de CI/CD se ejecutó de forma correcta. El archivo .travis.yml define el proceso. Para obtener más información sobre .travis.yml, consulta la documentación de Travis CI.

Panel de Travis con el resultado de la prueba

Salida adicional

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Puedes borrar el proyecto por completo o detener App Engine.

Borra el proyecto

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?