Dagger: CI/CD programmabile con Cue/Go/Python/TypeScript

Dagger (marzo 2022) di Solomon Hykes (co-founder Docker), Sam Alba, Andrea Luzzardi: piattaforma CI/CD programmabile con linguaggi reali. BuildKit-based, portable su ogni runner, cache universale.

Open Source DaggerSolomon HykesCI/CDBuildKitProgrammableOpen Source

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).

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi