Pipeline come YAML: il problema
Pipeline CI/CD sono quasi sempre YAML dichiarativi (GitHub Actions, GitLab CI, Jenkins Declarative, CircleCI, ecc.). Problemi: non testabili localmente, vendor lock-in, riuso limitato, no astrazioni ricche. Quando una pipeline fallisce in CI dopo 20 minuti, c’è un unico modo per debuggare: rilanciare.
La visione Dagger
Pipeline come codice in linguaggi reali: Python, TypeScript, Go, Java, Elixir, PHP. Ogni step è una funzione con input/output typed. Esecuzione su BuildKit (motore Docker build) per portabilità, cache e parallelismo.
Il rilascio
Dagger è pubblicato nel marzo 2022 da Solomon Hykes (cofounder Docker), Sam Alba, Andrea Luzzardi. Licenza Apache 2.0. Scritto in Go. Prima versione usa il linguaggio CUE; dalla versione 0.3 supporta Go, TypeScript, Python nativamente via Dagger SDK.
Architettura
- Dagger Engine — container (BuildKit wrapper) che esegue pipeline
- Dagger SDK — libreria per linguaggio (Go, TS, Python, PHP, Elixir, Java, Rust)
- GraphQL API — engine espone schema typed
- Content-addressed cache — layer e step cached globalmente
- Portable — gira in CI (GitHub Actions, GitLab CI, Jenkins, local macchine)
import dagger, anyio
async def main():
async with dagger.Connection() as client:
python = (
client.container()
.from_("python:3.12-slim")
.with_directory("/app", client.host().directory("."))
.with_workdir("/app")
.with_exec(["pip", "install", "-r", "requirements.txt"])
.with_exec(["pytest"])
)
await python.stdout()
anyio.run(main)
Lo stesso codice gira su macbook dev, GitHub Actions, Jenkins, GitLab: zero differenza.
Dagger Cloud
Prodotto commerciale Dagger Inc: visualizzazione, cache condivisa, telemetria, team collaboration. Free tier per open source.
Versioni
- 0.1 (marzo 2022) — CUE only
- 0.3 (giugno 2022) — Go SDK
- 0.6 (maggio 2023) — TS, Python SDK
- 0.9 (novembre 2023) — engine riscrittura, Module system
- 0.12 (2024) — Function service, cross-language modules
Concorrenti / complementari
- GitHub Actions, GitLab CI — pipeline YAML, non portable
- earthly — build framework simile, Earthfile DSL
- Pants, Bazel — build system monorepo
- Drone CI — YAML
- Jenkins Pipelines — Groovy
Dagger si complementa con CI esistenti (GitHub Actions invoca dagger call) più che sostituirli.
Nel contesto italiano
Dagger è emergente in Italia ma usato in:
- Team Python/TS con monorepo complessi
- Aziende multi-cloud che vogliono pipeline portable
- AI/ML pipeline — Python Dagger per training workflow
- Platform engineering — Dagger come backend di piattaforma custom
Adoption in crescita dal 2024 specialmente dopo module system (0.9+).
Riferimenti: Dagger (marzo 2022). Solomon Hykes (cofounder Docker), Sam Alba, Andrea Luzzardi. Licenza Apache 2.0. Scritto in Go. BuildKit engine. SDK: Go, TS, Python, PHP, Elixir, Java, Rust. Dagger Cloud (commercial).
