Realizar CI/CD con Shippable y Heroku

En la receta anterior, vimos un ejemplo de cómo Docker se puede utilizar para pruebas en un entorno de desarrollo y control de calidad local. Ahora, veamos un ejemplo de extremo a extremo para ver cómo Docker se utiliza en entornos de CI/CD. En esta receta, veremos cómo podemos utilizar Shippable (https://www.shippable.com) para realizar CI/CD y desplegarlo en Heroku (https://www.heroku.com).

Shippable es una plataforma de software como servicio que te permite agregar Integración y Despliegue Continuos a tus repositorios de GitHub y Bitbucket (Git) de manera fácil, y está completamente construida sobre Docker. Shippable utiliza miniones de compilación, que son contenedores basados en Docker, para ejecutar cargas de trabajo. Shippable admite muchos lenguajes, como Ruby, Python, Node.js, Java, Scala, PHP, Go y Clojure. Los miniones de compilación predeterminados son Ubuntu 14.04 LTS y Ubuntu 16.04. También han agregado soporte para utilizar imágenes personalizadas de Docker Hub como miniones. Shippable CI necesita información sobre el proyecto y las instrucciones de compilación en un archivo YAML llamado shippable.yml, que debes proporcionar en tu repositorio de código fuente. El archivo YAML contiene las siguientes instrucciones:

  • language: Esto mostrará el lenguaje de programación

  • python: Con esto, puedes especificar diferentes versiones del lenguaje para probar en una sola instrucción de compilación

  • build: Esto es la canalización de compilación

  • ci: Estas son las instrucciones para ejecutar la compilación

  • on_success: Estas son las instrucciones después de que la compilación tenga éxito, utilizadas para realizar el despliegue en PaaS como Heroku, Amazon Elastic Beanstalk, AWS OpsWorks, Google App Engine, etc.

Heroku es un Servicio de Plataforma como Servicio ( PaaS ) que permite a los desarrolladores ejecutar y operar aplicaciones completamente en la nube.

Para esta receta, utilizaremos el mismo código de ejemplo que utilizamos en la receta anterior, para probarlo en Shippable y luego desplegarlo en Heroku.

Preparación

Sigue los siguientes requisitos previos:

  1. Crea una cuenta en Shippable (https://www.shippable.com).

  2. Crea una bifurcación del ejemplo de Flask en https://github.com/kencochrane/heroku-flask-example y clónalo en tu máquina local.

  3. Crea una aplicación en Heroku para el repositorio bifurcado con los siguientes pasos:

Crea una cuenta (https://signup.heroku.com) en Heroku, instala la aplicación de Heroku y accede:

$ heroku login

Diagrama

Cambia tu directorio a donde clonaste tu bifurcación en el paso 2, y crea una aplicación en Heroku:

$ heroku create --ssh-git

Diagrama

Push tu código a Heroku para desplegar tu aplicación:

$ git push heroku master

Diagrama

Después de un minuto, tu aplicación estará desplegada:

Diagrama

Asegúrate de que tu aplicación tenga al menos un dinamo, y abre la aplicación en tu navegador, para asegurarte de que esté funcionando:

$ heroku ps:scale web=1
$ heroku open

Diagrama

Tu navegador debería abrir y cargar la página de tu aplicación. Si el resultado funcionó, debería parecerse a lo siguiente:

Diagrama

  1. Actualiza el archivo shippable.yml en tu bifurcación para utilizar la URL de Git de tu aplicación de Heroku:
language: pythonpython:  - 3.7build:  ci:    - shippable_retry pip install -r requirements.txt    # Crea carpetas para pruebas y cobertura de código    - mkdir -p shippable/testresults    - mkdir -p shippable/codecoverage    # ejecuta pruebas    - pytest  on_success:    # mi URL de Git de Heroku:    # URL http: https://git.heroku.com/blooming-mountain-58044.git    # URL git: git@heroku.com:blooming-mountain-58044.git    # utiliza URL git, no http.    # cambia este valor al valor de tu aplicación.    - git push git@heroku.com:blooming-mountain-58044.git
  1. Confirma los cambios en tu código y push a tu repositorio bifurcado.

Cómo hacerlo…

Realiza los siguientes pasos:

  1. Accede a Shippable y selecciona el enlace Habilitar un proyecto:

Diagrama

  1. Luego, selecciona la suscripción correcta en la izquierda, y te mostrará una lista de tus repositorios debajo. Selecciona el repositorio heroku-flask-example:

Diagrama

  1. Haz clic en el botón Play y selecciona Rama para compilar. Para esta receta, elegí master:

Diagrama

Si la compilación es exitosa, verás el icono de éxito.

La próxima vez, si realizas un commit en tu repositorio, se desencadenará una compilación en Shippable y se probará el código. Ahora, para realizar Despliegue Continuo en Heroku, sigue las instrucciones proporcionadas en el sitio web de Shippable (http://docs.shippable.com/ci/deploy-to-heroku/). Shippable necesitará tener permiso para realizar cambios en nuestra aplicación de Heroku; le otorgamos permiso agregando su clave de despliegue SSH a nuestra cuenta de Heroku.

  1. Obtiene la clave de despliegue desde tu panel de Shippable haciendo clic en el icono de engranaje y seleccionando Configuración:

Diagrama

  1. Hacia la parte inferior de la página, hay una sección de Clave de despliegue. Copia la clave:

Diagrama

  1. Ahora que tienes la clave, ve a la configuración de tu cuenta en Heroku:

Diagrama

  1. Desplázate hacia abajo hasta que veas la sección de Claves SSH, y haz clic en el botón Agregar.

Diagrama

  1. Se abrirá una ventana donde podrás agregar la clave SSH que copiaste de Shippable. Pega la clave y haz clic en Guardar cambios:

Diagrama

Ahora hemos hecho que, cuando se realice una compilación exitosa, Shippable pueda push cambios a Heroku.

Cómo funciona…

En cada instrucción de compilación, Shippable inicia un nuevo contenedor dependiendo de la imagen y el tipo de lenguaje especificado en el archivo shippable.yml, y ejecuta la compilación para realizar pruebas. Shippable sabe cuándo iniciar una compilación porque agrega un webhook a tu repositorio de GitHub cuando registras tu aplicación con ellos:

Diagrama

Así que, cada vez que se realiza un cambio en GitHub, se desencadena una compilación en Shippable, y después de que la compilación es exitosa, se despliega en Heroku.

Ver también