CI/CD · Git workflow

CI/CD per Laravel: Git workflow e deploy zero-downtime

Di · Ultimo aggiornamento: · lettura gratuita, nessun paywall

Il divario tra "funziona sul mio computer" e "si deploya da solo in sicurezza" è più piccolo che mai. Questa guida ti offre un Git workflow che scala anche per un team di uno, una pipeline CI copia-incolla e i pattern di deploy zero-downtime che rendono noiose le release del venerdì.

In questa guida
  1. Perché le pipeline ripagano (anche da solo)
  2. Un Git workflow che scala verso il basso
  3. La pipeline CI, pronta da copiare
  4. Opzioni di deploy zero-downtime
  5. Dopo il deploy
  6. Migrazioni e strategia di rollback
  7. FAQ

Perché le pipeline ripagano (anche da solo)

CI/CD non è cerimonia enterprise — è l'assicurazione più economica che un codebase possa comprare:

Un Git workflow che scala verso il basso

Salta git-flow a meno che non spedisci release in scatola. Per web app, trunk-based con branch di breve durata vince:

La pipeline CI, pronta da copiare

Quattro stage, ognuno che fallisce in fretta: style, analisi statica, test, audit di sicurezza. Ecco un workflow GitHub Actions completo per un'app Laravel (mettilo in .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

Note da rubare:

Opzioni di deploy zero-downtime

Zero-downtime significa: costruisci la nuova release accanto a quella vecchia, scambia atomicamente, riavvia i worker. Tre modi per ottenerlo:

1. Webhook push-to-deploy (default consigliato)

Il tuo host Git chiama un webhook alla push; il server costruisce una nuova release in releases/, esegue composer install, migrate --force e le cache, scambia il symlink current e riavvia i queue worker. È esattamente ciò che Cipi configura automaticamente quando colleghi GitHub o GitLab a un'app — deploy key, webhook, release e swap del symlink inclusi, più build asset Node al deploy e snapshot database pre-deploy in Cipi 5. Costo di setup: un cipi app create.

2. Deploy guidato da CI (SSH da Actions)

La pipeline costruisce gli artifact e li spinge via SSH (Deployer o rsync + script). Più controllo, più YAML da gestire — vale la pena quando ti servono artifact di build identici tra ambienti.

3. L'ibrido

CI esegue i test; se verde, colpisce il webhook di deploy. Ottieni deploy gated senza spostare la logica di deployment in CI. Con Cipi, basta un curl di una riga a fine workflow.

Dopo il deploy

Migrazioni e strategia di rollback

Mettilo in pratica con Cipi

Cipi è la CLI di deploy gratuita e open source citata in tutta questa guida: un comando trasforma un VPS Ubuntu fresco in un server di produzione hardened per Laravel — Nginx, PHP-FPM o Octane, MariaDB o PostgreSQL, queue, scheduler, SSL e deploy Git zero-downtime inclusi.

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

Domande frequenti

Ho bisogno di CI/CD come sviluppatore Laravel da solo?

Sì — anzi più di un team, perché nessuno revisiona il tuo lavoro. Una pipeline che esegue Pint, Larastan, Pest e composer audit a ogni push è una seconda coppia d'occhi instancabile, e i deploy via webhook fanno smettere lo shipping di essere un rituale manuale.

Come ottengo deploy zero-downtime per Laravel?

Usa il pattern releases: costruisci la nuova versione nella sua directory, esegui migrazioni e cache, poi scambia atomicamente un symlink e riavvia i queue worker. Strumenti come Cipi configurano tutto automaticamente per push GitHub e GitLab, così ottieni deploy zero-downtime senza scrivere script di deployment.

Quanto dovrebbe durare una pipeline CI Laravel?

Meno di cinque minuti nel caso comune, altrimenti gli sviluppatori iniziano a bypassarla. Esegui Pest in parallelo, metti in cache le dipendenze Composer e sposta i test browser lenti in un job notturno invece di bloccare ogni PR.

Le migrazioni database sono sicure con deploy zero-downtime?

Sì, con il pattern expand/contract: fai prima cambiamenti additivi, deploya codice che funziona con entrambi gli schema e rimuovi le vecchie colonne in una release successiva. Tieni i cambiamenti distruttivi nel loro deploy dedicato e fai uno snapshot pre-deploy (automatico in Cipi 5) così gli errori sono reversibili.

È sicuro deployare il venerdì?

Con diff piccoli, pipeline verde, health check e rollback con un comando — sì. La paura del venerdì è sintomo di deploy manuali a batch grossi; sistema il processo e il giorno della settimana smette di contare.

Continua a leggere