CI/CD · Flujo de trabajo de Git

CI/CD para Laravel: flujo de trabajo de git e implementaciones sin tiempo de inactividad

Por · Última actualización: · lectura gratuita, sin muro de pago

La brecha entre "funciona en mi máquina" y "se implementa de forma segura" es menor que nunca. Esta guía le brinda un flujo de trabajo de Git que se reduce a un equipo de una sola persona, una canalización de CI de copiar y pegar y los patrones de implementación sin tiempo de inactividad que hacen que los lanzamientos de los viernes sean aburridos.

En esta guía
  1. Por qué los oleoductos valen la pena (incluso solos)
  2. Un flujo de trabajo de Git que se reduce
  3. La canalización de CI, lista para copiar y pegar
  4. Opciones de implementación sin tiempo de inactividad
  5. Después del despliegue
  6. Estrategia de migraciones y reversión
  7. Preguntas frecuentes

Por qué los oleoductos valen la pena (incluso solos)

CI/CD no es una ceremonia empresarial: es el seguro más barato que puede comprar una base de código:

Un flujo de trabajo de Git que se reduce

Omita git-flow a menos que envíe lanzamientos en caja. Para las aplicaciones web, gana la basada en troncales con ramas de corta duración:

La canalización de CI, lista para copiar y pegar

Cuatro etapas, cada una de las cuales falla rápidamente: estilo, análisis estático, pruebas, auditoría de seguridad. Aquí hay un GitHub completo Flujo de trabajo de acciones para una aplicación Laravel (suéltela en .github/workflows/ci.yml):

name: CI

on:
  pull_request:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.4'
          extensions: mbstring, xml, curl, zip, intl, pdo_sqlite
          coverage: none

      - name: Install dependencies
        run: composer install --prefer-dist --no-progress

      - name: Prepare environment
        run: |
          cp .env.example .env
          php artisan key:generate

      - name: Code style (Pint)
        run: vendor/bin/pint --test

      - name: Static analysis (Larastan)
        run: vendor/bin/phpstan analyse --memory-limit=1G

      - name: Tests (Pest)
        run: php artisan test --parallel

      - name: Security audit
        run: composer audit

Notas que vale la pena robar:

Opciones de implementación sin tiempo de inactividad

Tiempo de inactividad cero significa: compilar la nueva versión junto a la anterior, intercambiar atómicamente, reiniciar los trabajadores. tres formas de conseguirlo:

1. Webhook push-to-implement (predeterminado recomendado)

Su host de Git llama a webhook al presionar; el servidor crea una nueva versión en releases/, corre composer install, migrate --force y almacena en caché, intercambia el current enlace simbólico y reinicia los trabajadores de la cola. Esto es exactamente lo que Cipi configura automáticamente cuando conectas GitHub o GitLab a una aplicación: implementa claves, webhook, versiones y enlaces simbólicos intercambio incluido, además de compilaciones de activos de nodo en instantáneas de base de datos de implementación y previas a la implementación en Cipi 5. Costo de configuración: unocipi app create.

2. Implementación impulsada por CI (SSH desde acciones)

La canalización crea artefactos y los envía a través de SSH (Deployer o rsync + script). Más control, más YAML para poseer: vale la pena cuando necesitas crear artefactos idénticos en todos los entornos.

3. El híbrido

CI ejecuta pruebas; en verde, presiona el despliegue webhook. Obtiene implementaciones cerradas sin mover la implementación lógica en CI. Con Cipi, eso es una línea curl al final del flujo de trabajo.

Después del despliegue

Estrategia de migraciones y reversión

Pon esto en práctica con Cipi

Cipi es la open-source implementación gratuita CLI a la que se hace referencia en esta guía: un comando se convierte en un nuevo Ubuntu VPS en un servidor de producción reforzado para Laravel — Nginx, PHP-FPM o Octane, MariaDB o PostgreSQL, colas, programador, SSL e implementaciones de Git sin tiempo de inactividad incluidas.

wget -O - https://cipi.sh/setup.sh | fiesta

Preguntas frecuentes

¿Necesito CI/CD como desarrollador Laravel en solitario?

Sí, posiblemente más que un equipo, porque nadie revisa tu trabajo. Un oleoducto que ejecuta auditorías de Pint, Larastan, Pest y composer en cada impulso es un segundo par de ojos incansable, y las implementaciones basadas en webhook significan que el envío deja de ser un ritual manual.

¿Cómo consigo implementaciones sin tiempo de inactividad para Laravel?

Utilice el patrón de lanzamientos: cree la nueva versión en su propio directorio, ejecute migraciones y cachés, luego intercambie atómicamente un enlace simbólico y reinicie los trabajadores de la cola. Herramientas como Cipi configuran esto automáticamente para las inserciones GitHub y GitLab, de modo que obtenga implementaciones sin tiempo de inactividad sin escribir scripts de implementación.

¿Cuánto tiempo debería tardar una canalización de CI Laravel?

Menos de cinco minutos para el caso común, o los desarrolladores comenzarán a evitarlo. Ejecute Pest en paralelo, almacene en caché Composer dependencias y mueva las pruebas lentas del navegador a un trabajo nocturno en lugar de bloquear cada PR.

¿Son seguras las migraciones de bases de datos con implementaciones sin tiempo de inactividad?

Sí, con el patrón expandir/contraer: primero realice cambios adicionales, implemente código que funcione con ambos esquemas y elimine las columnas antiguas en una versión posterior. Mantenga los cambios destructivos en su propia implementación y tome una instantánea previa a la implementación (automática en Cipi 5) para que los errores sean reversibles.

¿Es seguro implementar los viernes?

Con pequeñas diferencias, un proceso ecológico, controles de estado y reversión con un solo comando, sí. El temor del viernes es un síntoma de implementaciones manuales de grandes lotes; arregla el proceso y el día de la semana deja de importar.

Sigue leyendo