Ravel: la integración de CI/CD

ravel

Laravel 101: la integración de CI/CD no tiene por qué ser una pesadilla

Presentamos Ravel, un entorno CI/CD con batería incluida para Laravel.


Laravel es una de las muchas pilas tecnológicas que usa mi equipo. El único PHP Framework que le brinda un código robusto, limpio y de alto rendimiento nos promete desarrollar un excelente proyecto para nuestros clientes.

En aquel entonces, cuando traté de automatizar la implementación de back-end en nuestros servidores en la nube, me quedé atascado con los problemas de CI/CD para nuestros repositorios. FYI, usamos Bitbucket para nuestra subversión, y de alguna manera necesito implementar los últimos cambios de este repositorio en nuestro servidor en DigitalOcean.

El CI y el CD

Para el desarrollo de back-end, creamos principalmente una API RESTful para el proyecto. El uso de Laravel con algunas bibliotecas ha sido un estándar para el equipo. ¿Sabes que? manejar múltiples desarrolladores en el mismo equipo es una molestia si no podemos administrar sus compromisos y cambios en nuestro repositorio.

Para mí, mi función principal como Dev-Ops es ayudarlos a automatizar las pruebas, la implementación, etc. en el servidor. Este acto de automatizar la implementación, las pruebas y el lanzamiento se denomina Integración continua e Implementaciones continuas.

En resumen, el proceso de CI necesitaba construir y probar sus compromisos o cambios realizados en el repositorio. El proceso de CD se puede ejecutar para implementar, operar y monitorear el lanzamiento que se ha realizado en el servidor.

En Bitbucket, podemos usar sus Bitbucket Pipelines para integrar nuestro entorno de CI/CD para nuestro proyecto/repositorio.

ravel

Si bien ya existen muchas configuraciones de ejemplo para Bitbucket Pipeline, confíe en mí, crear una nueva que se adapte a su proyecto, tecnología y entorno no es un trabajo fácil. al menos para mi :v

Se han realizado muchas configuraciones, utilizando diferentes imágenes, incluidas las externas e internas que Bitbucket proporciona de forma predeterminada, pero siempre existen algunos problemas de rendimiento y estabilidad.

El uso de Laravel como la pila tecnológica principal requiere que instalemos la versión correcta de PHP, las extensiones y varias bibliotecas y archivos binarios para instalar en el entorno.

Por eso, decidí donar mi tiempo libre a la comunidad de código abierto para desarrollar una imagen especial para la integración de CI/CD especializada para el marco de Laravel.

Nació un pequeño cuervo

Inspirándome en Laravel Sail, el entorno de desarrollo basado en la ventana acoplable de Laravel, escribí Ravel, un entorno CI/CD con batería incluida para Laravel.

ravel

Ravel es una imagen mínima y estable que puede usar para integrar CI/CD para proyectos de Laravel. Está basado en Ubuntu 22.04 LTS (Jammy Jellyfish) con algunos paquetes y bibliotecas incluidos para comenzar a construir y probar el proyecto Laravel. En resumen, ¡es plug-and-play!

Si tienes curiosidad de dónde viene el nombre “Ravel”, es una mezcla de Raven y Laravel 🙂

El Ravel en el trabajo

Suficiente para la historia, veamos cómo Ravel te ayuda a integrar CI/CD en el proyecto Laravel.

# https://support.atlassian.com/bitbucket-cloud/docs/configure-bitbucket-pipelinesyml
# Maintainer: Ezra Lazuardy <[email protected]>
definitions:
  steps:
    - step: &build-project
        name: Build Project
        image: ezralazuardy/ravel:8.2
        services:
          - mysql
        script:
          - ln -f -s .env.example .env
          - composer install --optimize-autoloader --no-interaction --no-progress --prefer-dist --no-dev
          - php artisan key:generate
          - php artisan migrate:fresh --seed --force
          - php artisan optimize
          - chown -R $USER:www-data storage bootstrap/cache
          - chmod -R 775 storage bootstrap/cache
  services:
    mysql:
      image: mysql:8.0
      environment:
        MYSQL_DATABASE: conn_app_main_api
        MYSQL_USER: conn_app_main_api
        MYSQL_PASSWORD: conn_app_main_api
        MYSQL_RANDOM_ROOT_PASSWORD: "yes"

pipelines:
  branches:
    development:
      - step:
          name: Deployment to Staging
          image: ezralazuardy/ravel:8.2
          deployment: staging
          script:
            - BITBUCKET_COMMIT_MESSAGE=`git log --format=%B -n 1 $BITBUCKET_COMMIT`
            - composer install --optimize-autoloader --no-interaction --no-progress --prefer-dist --no-dev
            - php vendor/bin/vapor deploy staging --commit="$BITBUCKET_COMMIT" --message="$BITBUCKET_COMMIT_MESSAGE"
    main:
      - step:
          name: Deployment to Production
          image: ezralazuardy/ravel:8.2
          deployment: production
          script:
            - BITBUCKET_COMMIT_MESSAGE=`git log --format=%B -n 1 $BITBUCKET_COMMIT`
            - composer install --optimize-autoloader --no-interaction --no-progress --prefer-dist --no-dev
            - php vendor/bin/vapor deploy production --commit="$BITBUCKET_COMMIT" --message="$BITBUCKET_COMMIT_MESSAGE"
  pull-requests:
    "**":
      - step: *build-project

¿Recuerdas los Pipelines de Bitbucket que mencioné antes? Esta es la configuración de ejemplo que se puede usar para construir y probar cualquier proyecto de Laravel con la ayuda de Ravel.

Puede escribir directamente ezralazuardy/ravel:<php-version> nombre de la imagen en su archivo de configuración y ¡listo! Ravel estará a su servicio para ejecutar el proceso de CI/CD.

ravel

¿Por qué Ravel?

Una pregunta simple y obvia que podrías hacerte es, ¿por qué necesitamos usar Ravel? ¿No es la otra imagen muy parecida y simplemente hace el mismo trabajo?

La respuesta a eso es “los problemas de estabilidad”. Está bien si desea usar otra imagen o tal vez crear su propia imagen. Sin embargo, se ha convertido en su responsabilidad asegurarse de que la imagen funcione como se esperaba, sin fallas y sin problemas de seguridad.

Usar Ravel realmente resuelve este problema, al menos para el proyecto Laravel. No pierdas tu tiempo construyendo u optimizando alguna pequeña cosa, amigo mío.

Mantenlo simple, porque un genio siempre busca la simplicidad.

 

La optimización prematura es la raíz de todos los males

– Donald Knuth

 

Donde el pájaro anida

Vaya a mis páginas de Docker Hub para ver la versión actual de Ravel.

https://hub.docker.com/r/ezralazuardy/ravel/tags

O simplemente puede extraer la imagen de la ventana acoplable a su entorno local

docker pull ezralazuardy/ravel:8.2

Las etiquetas utilizadas por Ravel indican la versión de PHP que se utiliza en su interior. Asegúrate de usar la versión correcta de Ravel para tus proyectos de Laravel.


Gracias por llegar hasta aquí, si encuentras esto útil no olvides dejar un👍🏼y suscribirse para recibir más contenido.

Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre AWS y Laravel:

Recent Post