Conoce la implementación continua con Bitbucket Pipelines

En esta guía veremos cómo se puede desplegar una canalización de implementación continua con Bitbucket Pipelines.

Sten Pittet Sten Pittet

En el desarrollo de software, a veces tienes que realizar difíciles compensaciones al desarrollar una aplicación. Si quieres ir más rápido, la creencia general es que tendrás que hacer concesiones en la calidad de tus versiones. Sin embargo, hay una práctica de desarrollo que te permite ahorrar tiempo, además de publicar más rápido, y esa en la implementación continua.

Gracias a la implementación continua, eliminas el estrés que supone implementar software convirtiendo esta tarea en un proceso automatizado. Tu equipo de desarrollo no tiene que detenerse más ni cambiar de contexto para una versión: el código se lanza a tus clientes en cuanto un desarrollador ha terminado su trabajo.

En esta guía veremos cómo se puede desplegar una canalización de implementación continua con Bitbucket Pipelines.

Entrega continua frente a implementación continua

La práctica de entrega continua consiste en asegurarse de que el código siempre esté listo para publicar, aunque no se implementen todos los cambios en la producción. Es recomendable actualizar la producción tan a menudo como sea posible para mantener al mínimo el alcance de los cambios, pero tú eres quien decide en última instancia el ritmo de publicación.

En la implementación continua, los nuevos cambios que se envían al repositorio se implementan automáticamente en la producción si superan las pruebas. Esto pone más énfasis (o lo que es lo mismo, más presión) en la cultura de pruebas, pero es una forma excelente de acelerar el ciclo de feedback con los clientes.

Diagrama que muestra la diferencia entre la implementación continua y el desarrollo continuo | CI/CD de Atlassian

Requisitos

Duración:

30 minutos

Público:

Usuario sin experiencia en la implementación continua y/o Bitbucket Pipelines

Requisito previo:

Pruébalo gratis

Configuración de un canal de implementación continua

La implementación continua es una manera excelente de conseguir que los equipos aceleren el desarrollo. Elimina los obstáculos relacionados con el proceso de aprobación de publicaciones y permite a los desarrolladores recibir feedback de los clientes en cuanto han terminado su trabajo. Es más fácil detectar y resolver incidencias, y hay menos cambio de contexto, ya que deja de haber tiempo de publicación.

Configurar una canalización de implementación continua con Bitbucket Pipelines es muy sencillo. Veremos cómo hacerlo con una sencilla aplicación Hello World que pasa por un entorno de ensayo y pruebas de aceptación antes de publicarse automáticamente en la producción.

Puedes encontrar la fuente de la aplicación Hello World en el repositorio enlazado a continuación.

Preparación de una implementación en Heroku

Antes de comenzar, tenemos que añadir unas cuantas variables de entorno para poder implementar nuestra aplicación en Heroku:

  • HEROKU_API_KEY: puedes encontrar tu clave de API en tu cuenta de Heroku
  • HEROKU_STAGING: nombre de tu entorno de ensayo
  • HEROKU_PROD: nombre de tu entorno de producción

Para añadir las variables, ve a Pipelines > Environment variables (Canalizaciones > Variables de entorno) en la configuración del repositorio.

Configuración de variables de entorno que implementar en Heroku

Configuración de variables de entorno que implementar en Heroku

En esta guía utilizamos Heroku, pero se puede adaptar este ejemplo a otros servicios de hosting. Puedes encontrar otras guías de implementación en la documentación.

Configuración del canal

Nuestro workflow es sencillo:

  • Crea la aplicación.
  • Ejecuta pruebas para la compilación.
  • Impleméntala en el entorno de ensayo.
  • Ejecuta pruebas de aceptación en el entorno de ensayo.
  • Haz la implementación en producción.

Como verás, es muy sencillo crear la configuración de canalización correspondiente. Para empezar, añadimos nuestra implementación automática en el entorno de ensayo, para asegurarnos de que todos los envíos funcionan correctamente.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - npm test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main 

Notarás que utilizamos una clonación completa para que Heroku no rechace nuestro envío. Además, también utilizaremos una canalización específica de rama para que solamente se implementen en el entorno de ensayo los cambios enviados en la rama principal, y no en otras ramas. Puedes enviar esta configuración a Bitbucket para verla en acción.

Implementación automática completada en el entorno de ensayo


En esta fase, tenemos implementada nuestra aplicación Hello World en el entorno de ensayo.

Ahora podemos avanzar al siguiente paso y añadir nuestras pruebas de aceptación. Las pruebas de aceptación sirven para asegurarnos de que la aplicación se comporta como se esperaba en un entorno similar al de producción (ensayo). El objetivo es acabar con incertidumbres debidas a diferencias en la configuración entre el entorno utilizado para probar la compilación y la producción.

Si nos fijamos en el código de esta aplicación, la prueba hace algo tan sencillo como determinar si la cadena "Hello World" está presente en la página. En una aplicación real, recomendamos tener pruebas de aceptación que vayan mucho más allá y verifiquen que todos los servicios de base que utiliza la aplicación (base de datos, caché, terceros, etc.) funcionan correctamente.

Así que vamos a añadir nuestra prueba justo después de la implementación en el entorno de ensayo.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - HEROKU_STAGING=$HEROKU_STAGING npm test acceptance-test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main             - npm test acceptance-test  

Tras aplicar esta nueva configuración en Bitbucket, podemos ver nuestro canal completado satisfactoriamente.

Bitbucket Pipelines ahora ejecuta pruebas de aceptación tras la implementación en el entorno de ensayo

Lo único que queda es añadir nuestra implementación de producción al final, para completar nuestra canalización de implementación continua.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - npm test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main             - HEROKU_STAGING=$HEROKU_STAGING npm test acceptance-test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_PROD.git main  

Un último envío a Bitbucket llevará nuestros cambios de código a través de toda la canalización, compilando y probando el código y, después de verificar que el entorno de ensayo funciona, implementándolo en producción. En este caso, la página de inicio se ha actualizado con un mensaje diferente, para asegurarnos de que se implementa hasta la producción.

¡El nuevo mensaje ha llegado hasta la producción, tal y como queríamos!

Puedes comprobar la canalización y asegurarte de que ha recorrido correctamente todas las fases.

Comprobación de que el código ha pasado por el canal

Es importante destacar la importancia de contar con un buen conjunto de herramientas de pruebas, así como un método de supervisión en tiempo real antes de continuar y desplegar la implementación continua para tus propios repositorios. A partir de ahora, los cambios irán directos a la producción en cuanto se envíen a la rama principal, de modo que es muy importante garantizar que las pruebas automatizadas comprueban las partes críticas de la aplicación. Además, necesitarás herramientas de supervisión para detectar cambios que afectan de forma negativa tus instancias de producción, ya se trate de una infracción total o de un servicio degradado.

Encontrarás la fuente final en el repositorio de Bitbucket Cloud vinculado a continuación.