Ejecutar ramas de funciones con Bitbucket Pipelines

Aprende a realizar la entrega continua con un flujo de trabajo de rama de funciones o Gitflow. 

Sten Pittet Sten Pittet

Tanto si usas Gitflow como si simplemente utilizas ramas de función con una rama principal, con Bitbucket Pipelines te será muy sencillo adoptar la entrega continua (CD). No es necesario configurar un servidor de integración continua (CI) complejo, solo tienes que habilitar Pipelines y definir tus flujos de trabajo para ejecutar pruebas e implementaciones en tus ramas.

Canalización de Bitbucket Pipelines

En este tutorial vamos a ver cómo puedes configurar Bitbucket Pipelines para ejecutar diferentes canalizaciones para diferentes ramas, y cómo proteger tus ramas de fusiones incorrectas.

Paso 1: Comienza con canalizaciones predeterminadas que se ejecutarán en ramas de funciones

Usar ramas de función es una manera excelente de evitar que la rama principal se dañe a menudo. Los desarrolladores pueden trabajar en una mejora concreta en una rama independiente y fusionar sus cambios cuando su compilación tenga luz verde. Sin embargo, esta situación no significa que sea menos importante mantener la estabilidad de tus ramas de función. Para que la colaboración sea perfecta, es igual de importante mantener las ramas de función en buen estado. Las ramas de función sirven para saber qué cambios se han realizado para resolver una incidencia concreta y no deben tomarse como una oportunidad para retrasar la calidad.

Así, lo primero que hay que hacer al habilitar Bitbucket Pipelines es crear una canalización predeterminada que ejecute pruebas para cada rama. Hacerlo es tan sencillo como elegir una de las plantillas predeterminadas disponibles.

Configuración de canalización JavaScript predeterminada

Todas las plantillas específicas de lenguaje utilizan una canalización predeterminada con la palabra clave predeterminada que se ejecutará con cada nueva rama que se envíe. Para que la primera canalización se ejecute en la rama principal, puedes confirmar el archivo de configuración bitbucket-pipelines.yml en el repositorio.

Nuestra primera canalización ejecutada para una rama maestra

Puedes enviar una nueva rama con cambios en ella para verificar que la misma canalización se ejecuta en otra rama.

Paso 2: Añadir una nueva canalización para la rama principal

Si practicas la entrega continua, será muy probable que quieras que los cambios enviados a la rama principal se implementen de forma automática en un entorno de ensayo. Para ello, añadiremos una nueva canalización de rama que implemente el código después de ejecutar las pruebas y que solo se ejecute para la rama principal.

image: node:4.6.0
   pipelines:
   default:
     - step:
         script:
           - npm install
           - npm test
   branches:
     main:
       - step:
           script:
             - npm install
             - npm test
             - ./deploy.sh  

En la sección de ramas de la configuración de YML se define la canalización que queremos ejecutar cuando los cambios se envían a la rama principal.

A partir de este momento, los envíos a una rama principal desencadenarán una implementación después de haber compilado y probado la aplicación. Cualquier otra rama del repositorio simplemente compilará y probará los nuevos cambios.

Paso 3: Protege tus ramas de publicación

Después de llevar a cabo el segundo paso, cualquier desarrollador puede desencadenar una publicación a producción con tan solo fusionar sus cambios en la rama principal. Es una situación arriesgada, porque por error alguien podría implementar cambios que aún no están revisados. Por suerte, en Bitbucket puedes evitarlo fácilmente añadiendo permisos a tus ramas.

Ve a Configuración > Permisos de rama en tu repositorio.

Permisos de rama

Añade un nuevo permiso de rama para la rama principal y deja el permiso de escritura en blanco para que los desarrolladores no puedan hacer envíos directamente a la rama principal. Luego, asígnate el permiso Fusionar mediante solicitud de incorporación de cambios.

Añadir permisos de rama

Antes de guardar el nuevo permiso de rama, añadiremos un control de fusión para asegurarnos de que no se autorizan fusiones a menos que haya como mínimo una compilación con luz verde. Para habilitar la función correspondiente, basta con expandir la sección de controles de fusión.

Añadir permisos de rama

Después de guardar, puedes comprobar que la rama está protegida correctamente. Ningún usuario o grupo debe tener derecho de escritura y la fusión se debe autorizar mediante una solicitud de incorporación de cambios para los miembros de confianza del equipo.

Paso 4: Utiliza la solicitud de incorporación de cambios para promover cambios en la producción

Al no poder enviar directamente a la rama principal, tendrás que usar solicitudes de incorporación de cambios para implementar en producción. Una vez creada la solicitud de incorporación de cambios, solo hay que fusionar los cambios en la rama principal para desencadenar la canalización de implementación.

Solicitud de incorporación de cambios de Bitbucket

Después de la fusión, puedes ir a la sección Pipelines del repositorio para ver la implementación en acción.

Registros de canalización de Bitbucket

Hemos visto los conceptos básicos de ejecutar ramas de funciones con Bitbucket Pipelines. Puedes adaptar este ejemplo a tus necesidades y crear tu propia canalización de entrega continua. También puedes obtener más información con nuestras guías sobre entrega continua e implementación continua.