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, macchine locali)
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 iniziali

  • 0.1 (marzo 2022) — CUE only
  • 0.3 (giugno 2022) — Go SDK

La roadmap prevede SDK per TypeScript e Python nei mesi successivi.

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, con primi esperimenti in:

  • Team Python/TS con monorepo complessi
  • Aziende multi-cloud che vogliono pipeline portable
  • AI/ML pipeline — un futuro SDK Python potrà orchestrare training workflow
  • Platform engineering — Dagger come backend di piattaforma custom

Riferimenti: Dagger (marzo 2022). Solomon Hykes (cofounder Docker), Sam Alba, Andrea Luzzardi. Licenza Apache 2.0. Scritto in Go. BuildKit engine. SDK iniziale in Go. Dagger Cloud (commercial).

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