Débuter avec Dagger
Mise à jour :
Les pipelines CI/CD, c’est un peu comme les autoroutes du développement moderne : ils permettent d’aller vite, mais quand ça bouchonne, c’est la panique. Entre les scripts YAML imbriquées, les erreurs incompréhensibles et les limitations des outils traditionnels, on peut vite perdre patience. Et si je vous disais qu’il existe une solution plus flexible et – soyons honnêtes – bien plus agréable à utiliser ?
Dagger est là pour révolutionner la manière dont on construit et exécute les pipelines CI/CD. Imaginé par les créateurs de Docker, cet outil moderne et programmable mise sur les conteneurs pour offrir une expérience fluide et portable. Fini les configurations rigides : avec Dagger, vous codez vos pipelines comme n’importe quelle autre application. Python, Go, TypeScript… choisissez votre arme.
Dans ce guide, je vous propose de découvrir comment créer votre premier pipeline CI/CD avec Dagger et Python. On part de zéro, on installe l’outil, on écrit un pipeline simple pour construire et tester une application, et on termine par un aperçu des fonctionnalités avancées. Pas à pas, vous verrez à quel point il est facile et agréable de personnaliser vos workflows avec Dagger.
Prêt à transformer vos pipelines ? Alors, c’est parti ! 🚀
Historique rapide de Dagger
Pour bien comprendre ce qu’apporte Dagger, il faut jeter un œil à son histoire. L’outil n’est pas arrivé par hasard : il est né d’un besoin pressant dans le monde DevOps, celui de simplifier les pipelines CI/CD, souvent devenus des monstres de complexité.
Dagger a été lancé en 2022 par une équipe bien connue dans le monde du développement : le fondateur de Docker, Solomon Hykes rien que ça ! Son objectif ? Faire pour les pipelines ce que Docker a fait pour les conteneurs : unifier, standardiser et rendre les workflows accessibles à tous, même aux équipes les plus hétérogènes.
Dagger repose sur BuildKit, le moteur de construction qui propulse déjà Docker. BuildKit est connu pour ses performances et sa flexibilité : il est capable de gérer des caches intelligents, d’exécuter des étapes en parallèle et de fonctionner sur différents environnements, de votre laptop jusqu’à un cluster Kubernetes.
Avant Dagger, les pipelines CI/CD dépendaient souvent de solutions comme Jenkins, GitLab CI/CD ou CircleCI. Bien que puissants, ces outils sont souvent :
- Rigides : les configurations se font en YAML, un format pratique mais vite limité pour des cas d’usage complexes.
- Fragmentés : chaque outil a ses propres spécificités, rendant les pipelines difficiles à migrer ou à partager.
- Dépendants des plateformes : bon courage si vous voulez utiliser un outil sur plusieurs environnements.
Avec Dagger, tout change. Les pipelines deviennent des programmes que vous écrivez dans le langage de votre choix (Python, Go, TypeScript). Et surtout, ils fonctionnent partout où les conteneurs sont pris en charge.
Dagger, c’est l’idée que vos pipelines CI/CD doivent être aussi portables et modulaires que vos applications. À mon avis, c’est cette philosophie qui va convaincre de nombreuses équipes DevOps d’adopter cet outil. On ne parle plus de configuration, mais de programmation. Un vrai plaisir pour ceux qui aiment garder un contrôle total sur leurs outils.
Fonctionnalités de Dagger
Dagger n’est pas juste un autre outil de pipelines CI/CD dans une longue liste. Il se distingue par ses fonctionnalités uniques, conçues pour enrichir vos pipelines, tout en vous laissant un contrôle total. Voici ce qui rend Dagger incontournable.
-
Programmabilité : vos pipelines en Python (ou un autre langage !) : Fini les fichiers YAML ! Avec Dagger, vos pipelines sont écrits dans un langage de programmation que vous connaissez et appréciez : Python, Go ou TypeScript. Cela signifie :
- Plus de flexibilité : vous pouvez écrire des boucles, des conditions, importer des librairies, bref, tout ce qu’un programme classique permet.
- Une réutilisabilité accrue : organisez vos pipelines en fonctions, modules et classes.
-
Portabilité : des pipelines qui fonctionnent partout : Dagger repose sur les conteneurs (Docker, Podman, ou tout moteur conforme OCI). Cela garantit que vos pipelines tournent :
- Sur votre ordinateur local.
- Dans un environnement de CI/CD comme GitHub Actions.
- Sur des serveurs de production.
-
Caching intelligent : la rapidité avant tout : Dagger exploite un système de cache intégré pour éviter les exécutions inutiles :
- Si une étape n’a pas changé, elle est simplement récupérée depuis le cache.
- Les étapes parallélisables sont exécutées en même temps.
-
Compatibilité avec les outils DevOps populaires : Dagger ne cherche pas à remplacer tout votre écosystème ; il s’y intègre parfaitement. Vous pouvez connecter Dagger à vos outils préférés :
- Analyse de sécurité avec Trivy.
- Déploiements sur Kubernetes , AWS Lambda ou autres.
- Intégrations avec des services comme GitHub Actions ou GitLab CI…
-
Open Source et communauté active : Dagger est un projet open source avec une communauté en pleine croissance. Vous bénéficiez d’un outil gratuit, robuste et enrichi en continu grâce aux contributions des utilisateurs.
L’Architecture de Dagger
L’architecture de Dagger repose sur une combinaison de composants modulaires et interconnectés. Voici un aperçu de la structure de l’application :
Dagger Engine
Le Dagger Engine est le cœur du système. Il orchestre toutes les étapes d’un pipeline, des builds aux tests, en passant par le déploiement. Voici ses principales caractéristiques :
- Basé sur BuildKit : Le moteur utilise BuildKit, une technologie éprouvée utilisée par Docker, pour exécuter les étapes du pipeline de manière efficace, avec un cache intelligent et une exécution parallèle.
- Portabilité : Grâce à sa conception conteneurisée, le moteur fonctionne sur n’importe quel environnement compatible Docker ou OCI, comme Podman.
- Définition programmable : Toutes les étapes d’un pipeline sont décrites via un code exécutable dans des SDK comme Python, Go ou TypeScript, ce qui remplace les fichiers YAML traditionnels.
Les SDK Dagger
Les SDK Dagger sont les outils qui permettent aux développeurs de coder leurs pipelines. Contrairement aux solutions traditionnelles, où les workflows sont définis dans des fichiers YAML ou JSON, Dagger permet de les programmer dans des langages modernes :
- SDK Python : Idéal pour les développeurs qui préfèrent la simplicité et la lisibilité de Python.
- SDK Go : Conçu pour des performances élevées et une intégration profonde avec les outils cloud-native.
- SDK TypeScript : Parfait pour les développeurs orientés web et ceux travaillant déjà avec Node.js.
Ces SDK permettent de :
- Écrire des pipelines dynamiques avec des boucles, des conditions et des fonctions.
- Réutiliser des bibliothèques ou des modules pour éviter la duplication de code.
- Tirer parti des outils et des librairies de l’écosystème du langage choisi.
Dagger Verse
Le DaggerVerse est l’écosystème de modules qui enrichit l’expérience Dagger. Pensez-y comme à une boîte à outils extensible pour vos pipelines :
- Modules préconstruits par Dagger : Dagger fournit des modules prêts à l’emploi pour des tâches courantes, comme la gestion de conteneurs ou l’analyse de sécurité.
- Modules de l’écosystème : Une collection de modules partagés par la communauté et les partenaires de Dagger. Cela inclut des intégrations avec des outils populaires comme Kubernetes, Terraform, ou Trivy.
- Modules utilisateurs : Créez et partagez vos propres modules réutilisables pour standardiser vos pipelines au sein de votre équipe.
Dagger Cloud
Le Dagger Cloud est un service optionnel qui complète l’infrastructure locale de Dagger. Il apporte plusieurs avantages clés :
- Collaboration : Partagez vos pipelines, modules et configurations avec votre équipe directement depuis le cloud.
- Gestion centralisée : Accédez à vos workflows depuis n’importe où, avec une gestion unifiée des ressources.
- Performances optimisées : Exécutez vos pipelines dans des environnements scalables gérés par Dagger Cloud, en minimisant les limitations locales.
- Sécurité : Toutes les communications entre le Dagger Engine et le Dagger Cloud sont chiffrées.
Installation de Dagger
Maintenant que vous savez pourquoi Dagger est si révolutionnaire, il est temps de mettre les mains dans le cambouis !
Pré-requis
Avant d’installer la CLI Dagger, assurez-vous d’avoir les éléments suivants :
- Docker ou Podman installé sur votre machine.
- Python 3.7 ou une version ultérieure si vous souhaitez utiliser le SDK Python.
Si vous utilisez Podman, pensez à activer son socket de compatibilité Docker :
Télécharger et installer Dagger
-
Pour Linux :
Plutôt que d’installer Dagger avec le script shell disponible en ligne, je préfère utiliser une méthode plus manuelle. Allez sur la page des releases ↗ du projet Dagger et téléchargez le binaire correspondant à votre système.
Décompressez l’archive et déplacez le binaire dans le répertoire
/usr/bin/local
: -
Sur MacOS :
Installer si ce n’est pas déjà fait HomeBrew, exécutez la commande suivante :
Vérifier l’installation
Une fois la CLI Dagger installé, vérifiez que tout fonctionne correctement en exécutant :
Vous devriez voir quelque chose comme :
Installation de l’auto-complétion
Pour ajouter l’autocomplétion, il suffit de suivre ces étapes.
-
Pour Zsh :
-
Pour Bash :
Quittez votre shell et relancez-le pour que les modifications soient prises en compte.
Initialisation de votre premier pipeline Dagger
Il nous faut un projet pour commencer. Je vais créer un projet Python le plus basique possible avec cette arborescence :
Répertoireminimal-test/
- pyproject.toml
Répertoiresrc/
Répertoireminimal/
- …
- init .py
- main.py
On peut lancer l’installation du package :
Placez-vous dans le répertoire du projet et exécutez :
Cela génère une structure de projet de base :
Répertoirepipeline/
- LICENSE
- dagger.json
- pyproject.toml
Répertoiresdk/
- …
Répertoiresrc/
Répertoiremy_first_dagger_pipeline/
- init .py
- main.py
- uv.lock
- Un fichier
main.py
: votre point d’entrée ou sera décrit notre pipeline. - Un fichier
pyproject.toml
pour gérer les dépendances Python de dagger.
Ouvrons le fichier main.py
:
Quelques explications :
TestDaggerPython
est une classe qui regroupe plusieurs fonctions liées au pipeline.@object_type
: Transforme la classe en un type reconnu par Dagger, permettant d’appeler ses méthodes comme étapes du pipeline.
Ce pipeline contient deux fonctions :
container_echo
qui exécute un conteneur qui affiche une chaîne de texte passée en argument.grep_dir
qui exécute un conteneur qui recherche un motif dans les fichiers d’un répertoire.
Exécution d’une étape du pipeline
Nous allons lancer une des fonctions pour le moment. Pour le moment vons ne
connaissez que la commande dagger init
. Voyons la commande dagger call
qui
permet de lancer des étapes ne notre futur pipeline :
On voit que nos deux fonctions sont listées. On peut obtenir de l’aide sur la seconde fonction :
On voit qu’elle peut prendre deux arguments :
directory-arg
qui est un répertoire.pattern
qui est un motif.
Nous allons donc lancer notre fonction avec un répertoire et un motif :
Cette fonction nous indique que le fichier ./minimal/main.py
contient le motif
Hello
.
Maintenant que Dagger est installé et prêt à l’emploi, nous verrons dans le prochain guide pour construire un pipeline de CI/CD étape par étape.
Conclusion
Je sais, vous allez me dire “Outch, mais c’est complexe !”. Et oui, ça l’est. Mais c’est aussi le futur. C’est pour cette raison que je vous invite à vous former à au moins un langage de programmation comme Python ou Go. Dans un monde où l’automatisation et l’infrastructure as code deviennent la norme, il ne faut pas se le cacher : petit à petit, on vous demande de savoir écrire du code. Ce n’est plus seulement un “plus”, c’est une compétence indispensable.
Mais malgré cette complexité apparente, j’adore le concept de Dagger. Il réussit là où de nombreux outils CI/CD échouent : offrir une flexibilité totale tout en restant accessible, pour peu qu’on prenne le temps de l’apprivoiser.
Cela me donne envie de continuer à développer des contenus pour vous aider à plonger dans le développement. Je dois compléter la section Python avec de sujets essentiels comme :
- La programmation orientée objet (POO) pour structurer votre code.
- Les décorateurs pour étendre les fonctionnalités de vos pipelines sans tout réécrire.
- Poetry, l’outil parfait pour gérer vos dépendances Python et packager vos projets comme des pros et qui est un pré-requis pour Dagger.
Alors, prêt à monter en compétence ? La route est peut-être longue, mais elle est passionnante, et je suis là pour vous accompagner pas à pas. 🚀