<img height="1" width="1" src="https://www.facebook.com/tr?id=1101141206686180&amp;ev=PageView &amp;noscript=1">

Bitbucket Pipelines - Sólo una serie de tubos

¿Qué estamos tratando de resolver?

En mi anterior entrada del blog, hablamos de la configuración de la tubería Heroku con una aplicación Ruby on Rails para proporcionarnos un entorno de prueba local, un servidor de ensayo, y un servidor de producción. Si bien esto funciona muy bien para asegurar que probamos adecuadamente nuestra aplicación antes de liberarla en el mundo, tiene un defecto importante. Heroku no proporciona una buena interfaz para mantener un repositorio en un entorno multidesarrollador. Heroku no proporciona una buena interfaz para gestionar pull requests, vincular commits a problemas en un sistema de seguimiento de incidencias (JIRA), o incluso una buena herramienta de visualización del historial de ramas.

Bitbucket

Bitbucket Cloud es un servicio para alojar repositorios Git. Es un competidor popular de Github, propiedad de Atlassian. Bitbucket ofrece integración con Jira y Confluence para apoyar mejor el desarrollo de software, la gestión de ramas y el seguimiento de incidencias. Bitbucket es el servicio que utilizamos internamente.

¿Qué es un pipeline?

Para los propósitos de esta entrada de blog, sólo estamos discutiendo tuberías en el contexto de la integración continua / despliegue continuo. Un pipeline es esencialmente un script para automatizar tareas de despliegue de software. Su canalización puede automatizar la ejecución de pruebas unitarias, la ejecución de tareas de configuración del entorno y el despliegue de su producto final en otro servidor.

Flujo de canalización

Picture1-1

Figura 1- Visualización del flujo de software

La Figura 1 muestra un diagrama swimlane que describe el orden de las operaciones que queremos que ocurran. En primer lugar, un desarrollador enviará un commit a la rama de desarrollo en Bitbucket, desencadenando la ejecución de nuestro pipeline. Durante la ejecución, vamos a configurar imágenes docker para Ruby on Rails y Postgres, construir nuestra aplicación, ejecutar nuestras pruebas unitarias, y, finalmente, empujar el código a Heroku para una construcción final y despliegue.

Configuración del pipeline

Los pipelines de Bitbucket se definen a través de un archivo YAML llamado "bitbucket-pipelines.yml". Cuando empujes tu repositorio a Bitbucket, Bitbucket comprobará automáticamente el archivo YAML y comenzará a ejecutar los pasos descritos en ese archivo.

Diseñando el archivo YAML

Bitbucket ofrece una gran documentación sobre la configuración de un archivo YAML. Para empezar, hay dos objetos de nivel superior que deben ser definidos:

  • Image - la imagen a utilizar, en nuestro caso ruby:2.7
  • Pipelines - Un conjunto de pipelines para disparadores específicos (ramas, etiquetas, pull requests, etc.)

Picture2-1

Para el flujo de trabajo de la Figura 1, vamos a centrarnos sólo en los pipelines para ramas. Así que vamos a decirle a bitbucket que configure un pipeline para las ramas develop y master.

Picture3

Vamos a centrarnos en la rama de desarrollo, y definir algunos pasos para construir nuestra aplicación y enviarla a Heroku.

Picture4

Para construir y probar mi aplicación, necesito una base de datos Postgres. Así que vamos a informar a bitbucket, utilizando la etiqueta services.

Picture5

Perfecto. Ahora tenemos que proporcionar la etiqueta script. Esta etiqueta define la lista de comandos CLI a ejecutar. Usaremos la CLI para construir nuestra aplicación, configurar nuestra base de datos de pruebas y ejecutar nuestras pruebas unitarias (RSpec para nuestra aplicación Ruby on Rails).

Picture6

La configuración del pipeline anterior realiza toda la compilación y las pruebas. Ahora es el momento de definir el paso de despliegue. Este paso será mucho más sencillo, un simple push al repositorio de Heroku.

Picture7

Espera... ¿qué es "$HEROKU_API_KEY"?

Es una variable del repositorio. En Bitbucket, navega a:

Configuración del repositorio > Variables del repositorio

Una vez allí, verás un menú para proporcionar pares Clave/Valor:

Picture8

¿Cómo obtengo mi HEROKU_API_KEY?

Heroku proporciona una buena opción de línea de comandos para generar una clave API. Abre un prompt bash/cmd y escribe:

heroku authorizations:create

Picture9

Verás la salida de arriba. El UUID etiquetado como "Token" es tu clave API. Cópiala y pégala en las variables de tu repositorio con el nombre "HEROKU_API_KEY".

Ejecutando nuestro pipeline

Ahora que el pipeline está configurado, añade el bitbucket_pipelines.yml a tu commit y empuja el commit a tu rama develop de bitbucket.

Bitbucket comenzará a ejecutar automáticamente su canalización. Navega a Bitbucket y haz clic en el menú Pipelines para ver una lista de pipelines anteriores y en ejecución.

Desde allí, puede hacer clic en un pipeline en ejecución activa para obtener una vista en vivo de la ejecución del pipeline.

Picture10

Resumiendo

Los pipelines proporcionan una forma muy sencilla de ejecutar tareas comunes en respuesta a las acciones de los desarrolladores. Nuestro script proporciona una manera de ejecutar nuestras pruebas unitarias (asegurando que ningún código llegue a nuestro servidor de preparación sin pasar nuestras pruebas) y desplegar nuestro código a nuestro servidor de preparación.

Este no es el límite para los pipelines. Puedes configurar pipelines para responder a pull requests de desarrolladores, construir instaladores para tu software de escritorio, subir archivos a dropbox, e interactuar con muchos otros servicios.