Pratiche DevOps e CI/CD
1) Obiettivi e principi
Veloce e sicuro: cicli brevi, piccole partite di modifiche, controlli automatici.
Ripetibilità: infrastruttura come codice (IaC), ambiente = codice + criterio.
Osservabilità: metriche/roulotte/logi da scatola, SLO come contratto.
Verifica, controllo dei cambiamenti, isolamento regionale dei dati.
La regola d'oro è: «Prima la qualità, poi la velocità, altrimenti la velocità non arriverà mai».
2) Rami e ambienti
Trunk-based + feature flags - Selezione di base.
Brevi rami fiche (2-5 giorni), merge giornaliere in trunk.
Flag (server-side) per spedizioni incrementali e riparazioni sicure.
Ambienti git: 'dev' ' ' ' prod '(+ regionali' prod-eu ',' prod-latam ').
Promozione dei manufatti: un'immagine assemblata viene promossa attraverso ambienti (immutabile tag by digest).
Quando si dice: rari lanci degli assiemi di regolazione/SDK - allora i rami di rilascio + «hardening».
3) Piramide di qualità e linea rossa
1. Analisi statica (SAST, Linter, Licenze).
2. Test Unit/Property-based (secondi).
3. Contract-test (CDC) per API ed eventi (OpenAPI/AsyncAPI, Schema Registry).
4. Integrazioni (Testcontainers, broker locali).
5. E2E percorsi critici: registrazione di un KYC, deposito per l'avvio del gioco.
6. Test di carico/caos per pagamenti/portafogli/provider di giochi.
La qualità non passa dal deposito. Non ci sono eccezioni manuali senza change-record.
4) Catena di fornitura software (supply chain)
SBOM per ogni aspetto/pacchetto (CycloneDX/SPDX).
Etichette di manufatti (cosign), criteri «solo firmati» nell'admissione.
SCA/Dipendabot - vulnerabilità e licenze.
Provenance/SLSA - Assemblaggio riproduttivo, agente bild chiuso, attrazioni.
Segreti nel gestore (KMS/Esternal Secret), nessun segreto nei repo/login.
5) GitOps и IaC
Infra as Code: Terraform/Pulumi per la nuvola; Helm/Kustomize per k8s.
Controller GitOps (ArgoCD/Flux) - Manifesti dichiarativi, revival PR, audittrail.
Finestre/congelamento: settimane di tornei/orologi di punta - auto-pausa di rilascio.
Criteri OPA/Kyverno: no ': latest', no-root, read-only FS, disabilitazione.
6) Spedizione progressiva
Canary: 1→5→10→25→50→100% per metriche di guardrail (p95 latency, 5xx, errore budget burn).
Blue-Green - Pulsante di scelta veloce + piano di ripristino.
Shadow/Mirroring - Copia delle query senza impatto sulla risposta (per i nuovi adattatori PSP).
Feature flags - Abilita per segmenti (regione/ruolo/partner/canale) + kill-switch.
7) Migrazioni database (expand-and-contract)
Passo 1: espandiamo lo schema (nuove colonne/indici) - compatibile con il codice precedente.
Passo 2: un deposito di codice che scrive in entrambe le versioni/campi.
Passo 3 - Migrazione dei dati in background, metriche di progresso.
Passaggio 4 - Passa alla lettura dei nuovi campi.
Passo 5: l'eliminazione del vecchio è una release separata.
Non bloccare il DDL in prima serata; per le tabelle più alte, le migrazioni online.
8) Osservabilità e SLO
Metriche: RPS, p50/95/99, 4xx/5xx, saturation (CPU/mem/queue), DLQ/broker.
Metriche aziendali: TTP (time-to-play), TtW (time-to-wallet), FTD-success, KYC-TtV.
Trace-id dal gateway al database.
SLO: «Deposit p95, 300-500 ms», «success» 98. 5%`, `availability ≥ 99. 9%`.
Burn rate alert + rilascio auto-pausa in caso di degrado.
9) Incidenti, post-mortem, turni
Runbooks per flussi critici (deposito/output/CUS, giochi live).
La scala di priorità è P1... P4, proprietario, ETA, comunicazione (banner, stato pagina, partner).
Blameless postmortem con action items e date.
Alternanze on-call, avvisi chat, aggiornamenti statali ogni N minuti.
Traccia doc: chi/quando/cosa ha postato (commit, artefatto, ambiente, bandiera).
10) Sicurezza e compilazione (DevSecOps)
SAST/DAST/IAST, segreto-scan in CI.
, JWT con TTL, rotazione delle chiavi.
Masking PII/PAN in cassetti/roulotte; Registri WORM di azioni adminate.
Geo-segregation: cluster/database per regione, routing tramite gateway.
Change management: ticket/approval per zone sensibili (portafoglio/limiti).
11) Metriche e FinOps DORA
Deployment Frequency (release giornaliere piccole).
Lead Time for Changes (ideale: orologio).
MTTR (ripristino: minuti/ore).
Change Failure Rate (obiettivo 15%).
FinOps il costo degli ambienti, la cache RPS, i pool caldi, la pausa auto dei worker, «cost per le transizioni».
12) Specifica iGaming
Picchi (tornei/live) - Congelamento di grandi modifiche, riscaldamento cache/immagini, busti di quote.
Pagamenti/portafogli: pool/nodi separati, SLO avanzato, rollout canario per regione, doppia telemetria dei provider PSP.
CUS/Compilation: cadence di rilascio separato, post-apruzzi obbligatori della compilazione.
Partner/affiliati: SDK sicuro, API con finestra di supporto e monitoraggio dei vecchi client.
13) Esempio CI/CD (YAML, Action)
yaml name: ci-cd on:
push:
branches: [ main ]
paths: [ "services/wallet/" ]
jobs:
build_test_scan:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: Setup Node uses: actions/setup-node@v4 with: { node-version: 22 }
- run: npm ci --omit=dev working-directory: services/wallet
- run: npm test -- --ci working-directory: services/wallet
- name: Lint & SAST run: npm run lint && npm run sast working-directory: services/wallet
- name: Build image run:
docker build -t registry. local/wallet:${{ github. sha }} -f Dockerfile.
cosign sign --key $COSIGN_KEY registry. local/wallet:${{ github. sha }}
- name: SBOM & Scan run:
syft packages registry. local/wallet:${{ github. sha }} -o cyclonedx-json > sbom. json trivy image --exit-code 1 --severity HIGH,CRITICAL registry. local/wallet:${{ github. sha }}
- name: Push image run: docker push registry. local/wallet:${{ github. sha }}
deploy_stage:
needs: build_test_scan runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: Bump Helm values (image tag)
run: yq -i '.image. tag = "${{ github. sha }}"' helm/wallet/values-stage. yaml
- name: Create PR to gitops repo run: gh pr create -R org/gitops -B stage -H stage-bump/wallet-${{ github. sha }} -t "wallet:${{ github. sha }}" -b "Promote to stage"
promote_prod:
if: github. ref == 'refs/heads/main'
needs: deploy_stage runs-on: ubuntu-latest steps:
- name: Gate: SLO/quality checks run:./scripts/gates/check_stage_health. sh # p95, 5xx, e2e ok
- name: Canary 10%
run:./scripts/gitops/canary. sh wallet ${{ github. sha }} 10
- name: Auto-pause on degradation run:./scripts/gates/guardrails. sh./scripts/gitops/rollback. sh wallet
- name: Roll to 100%
run:./scripts/gitops/rollout. sh wallet ${{ github. sha }} 100
14) Assegno fogli
Prima del merge nel main
- Unità/CDC/integrazione verde.
- I lintern/SAST/licenze sono puliti.
- Gli schemi di OpenAPI/AsyncAPI e migrazione del database sono stati aggiornati.
- Flag Ficce aggiunti, follback definito.
Prima del lancio in prod
- Immagine firmata, SBOM allegato, vulnerabilità HIGH/CRIT chiusa.
- I dashboard/alert sono stati creati; I gate SLO sono collegati.
- Piano di ripristino, kill-switch, Shadow (se necessario).
- I vincoli regionali e i criteri dei dati sono confermati.
Incidenti
- Runbook trovato e aggiornato.
- Comunicazione utente/partner (modello, ETA).
- Postmortem alle 48, action items con date.
15) Anti-pattern
«Ricomponiamo per ogni ambiente».
Passaggi manuali senza controllo/ripetibilità.
Migrazioni di database in testa, risposte API incompatibili.
Segreti nelle variabili CI o nel repository.
Fiocchi catastrofici senza bandiera o rientro.
Assenza di SLO/Guardrail per il rilascio canaresco.
Loghi PII/PAN, nessuna maschera.
16) Modelli di microcopy utili
Rilascio (partner):- "Stiamo aggiornando il modulo di pagamento in modo graduale (10%→100%). Sono possibili ritardi di iscrizione di breve durata fino a 2 minuti. ETA completamento - ore 21:00 EET"
- "Il provider X è instabile. L'iscrizione può richiedere fino a 15 minuti. Stiamo lavorando ad una correzione. Il prossimo aggiornamento è tra 30 minuti
- Aggiornamento sospeso a causa dell'aumento dei ritardi. Restituisce la versione precedente. Dati e operazioni salvati"
17) Processo di implementazione (4 sprint)
1. Standard di qualità e pipline: SAST/Unit/CDC, immagine unica, firme, SBOM.
2. GitOps + ambiente: Helm/Kustomize, ArgoCD, promozione dell'artefatto, politica dei segreti.
3. Release progressive e SLO-gate: canary/shadow, guardrail, auto.
4. Affidabilità e costi: test di caos, scale auto/pool caldi, FinOps-dashboard.
Scorciatoia finale
Trunk + flags + piccoli lotti = velocità senza stress.
Un unico manufatto firmato + SBOM = catena di fornitura controllata.
GitOps + criteri = riproduzione e verifica.
Canary/Blue-Green + SLO-gate = rilasci sicuri.
Expand-and-contract per database = interruzioni zero.
Osservabilità e DORA = miglioramenti gestiti.
Isolamento e compilazione regionale = conformità e fiducia.