Dagger.io : La nouvelle ère du CI/CD dans le monde DevOps
Published: 2024-05-14 14:39:00

## Encore un nouvel outil ?

Les pratiques de développement logiciel ne cessent d'évoluer. 
Même si l'IA se taille une grosse part de l'attention, au cœur des évolutions les plus marquantes se trouve le CI/CD, une méthodologie devenue incontournable.

Quand j'étais petit, ma maman me disait ... 
Non ! 
Blague à part, je ne vais pas vous raconter ma vie au complet, mais une toute petite partie.
Au début de ma carrière, je rêvais d'être ... Genius dans un Apple Store ! :grin:  J'étais "légèrement" fanboy.
Puis, mon métier d'administrateur système des années 2000 a évolué, avec l'essor d'outils tels que Nagios, Puppet puis Bitbucket et Bamboo! 
À ce moment j'ai compris, en commençant à utiliser Jenkins, que ce "métier" d'administrateur système, mon métier, était voué a changer radicalement.

Depuis, les outils CI/CD sont resté au cœur de mon quotidien. 
Sans avoir la prétention de les avoir tous utilisé, j'ai pu en croiser de nombreux.
De Jenkins à Azure DevOps, en passant par GitLab CI, AWS CodeCommit ou encore GitHub Actions, ce paysage a énormément évolué.

Mais récemment, un petit nouveau semble vouloir secouer le paysage du CI/CD : [Dagger.io](https://dagger.io/)

Décrit comme la "superglue de DevOps", cette solution se présente comme une réponse innovante à la complexité croissante rencontrée par les développeurs. 
Dans cet article je vous propose d'approfondir Dagger.io, en explorant son histoire, ses avantages, ses défis, et en fournissant un exemple concret d'utilisation, le tout afin d'éclairer les développeurs et les entreprises sur son potentiel transformateur.

## Histoire de Dagger.io

À l'ínstar de [Hugging Face](https://fr.wikipedia.org/wiki/Hugging_Face) ou [Datadog](https://fr.wikipedia.org/wiki/Datadog), pour la plupart des français évoluant dans l'univers tech et startup, l'histoire de Docker et son équipe fondatrice représentait une "petite" fierté du fait de leurs origines hexagonales.

![Docker](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/acp4c00rvh5fxdfj6g3n.png)

Initié par Solomon Hykes, co-fondateur de Docker, Dagger.io est né d'une vision : offrir une solution de CI/CD universelle qui transcende les limitations des outils existants. 
En proposant un système qui n'est pas restreint par le langage ou la configuration, Dagger.io vise à unifier les processus de développement, test, et déploiement au sein d'une interface cohérente et flexible.

![Cue](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bzmryi96gxaa67sezfq2.png)

## Avantages

### Universalité et Flexibilité

L'un des atouts les plus significatifs de Dagger.io est son universalité. 

Dagger.io veut être à la CI/CD ce que Docker a été pour le développement et déploiement logiciel. 

En permettant l'utilisation de multiples langages de programmation et en s'affranchissant des contraintes de plateformes spécifiques, Dagger.io offre une liberté sans précédent dans la conception des pipelines de CI/CD. Cette flexibilité se traduit par une capacité accrue à personnaliser les processus de développement, répondant ainsi aux besoins spécifiques de chaque projet.

Cette flexibilité se manifeste également dans la personnalisation des workflows. Considérons une entreprise qui a besoin de déployer ses applications sur plusieurs plateformes cloud. Avec Dagger.io, elle peut créer un pipeline unique qui s'adapte à AWS, Azure, et Google Cloud, utilisant des conteneurs pour garantir que chaque déploiement est optimisé pour la plateforme cible.

### Portabilité et Consistance

Avez vous déjà pu tester vos jobs Gitlab CI, vos Actions Github, ou n'importe quel autre outils de pipeline ?
Non mais je veux dire vraiment testé ! En local, sur votre poste, avant de les envoyer dans le dit outil ?
Vous en reviez, Dagger.io le permet.

L'un des aspects les plus remarquables de Dagger.io est sa capacité à permettre l'utilisation locale des pipelines CI/CD, ce qui est particulièrement avantageux pour les développeurs cherchant à maintenir une cohérence entre les environnements de développement et de production. En utilisant Dagger.io, les développeurs peuvent exécuter et tester leurs pipelines directement sur leurs propres machines, comme s'ils étaient dans un environnement de production, sans nécessiter de modifications ou d'ajustements spécifiques. Cela est rendu possible grâce à l'encapsulation des tâches dans des conteneurs, qui assurent que toutes les dépendances et configurations sont uniformes, peu importe où le pipeline est exécuté.

Cette possibilité d'exécution locale simplifie grandement le processus de test et apporte une consistance particulièrement bénéfique lors du débogage. 

Si une application se comporte différemment en production, les développeurs peuvent reproduire l'environnement exact en utilisant Dagger.io localement, éliminant les incertitudes liées aux différences d'environnement.

### Intégration et Collaboration

Dagger.io favorise une intégration étroite entre les différents outils et services utilisés dans le cycle de développement logiciel. Cette interopérabilité facilite une collaboration plus étroite entre les équipes de développement, d'opération et de qualité, renforçant ainsi l'efficacité globale et la qualité des produits logiciels.

Une équipe peut utiliser Dagger.io pour orchestrer un workflow où le code est d'abord vérifié avec SonarQube, puis empaqueté avec Docker, et finalement déployé avec Kubernetes, le tout au sein d'un pipeline unique et cohérent.


![Diagramme Dagger](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cc00drao8ms35n61ceiw.png)

Cette intégration étroite encourage la collaboration entre les équipes. Les développeurs, les ingénieurs DevOps, et les testeurs peuvent travailler ensemble sur le même pipeline, partageant des retours en temps réel et améliorant la qualité du code et la rapidité des livraisons. Un développeur peut ajouter un test unitaire au pipeline, et le testeur peut immédiatement l'utiliser pour valider les nouvelles fonctionnalités, tout en s'assurant que l'infrastructure est correctement configurée par l'équipe DevOps.


## Inconvénients

### Courbe d'Apprentissage

La richesse de Dagger.io entraîne en contrepartie une courbe d'apprentissage abrupte pour les équipes non habituées aux technologies qui l'emploient. 

Une transition vers Dagger.io risque d'impliquer l'écriture de scripts en Python ou en Go pour définir les pipelines.
Ceci nécessiterait ainsi une montée en compétence significative. 
De plus, la compréhension du fonctionnement interne des conteneurs Docker, essentielle pour utiliser pleinement Dagger.io, constitue une barrière supplémentaire pour celles et ceux n'ayant pas d'expérience préalable avec la conteneurisation.

### Complexité Potentielle

La flexibilité et la polyvalence de Dagger.io, bien que bénéfiques, peuvent introduire une complexité supplémentaire dans la configuration et la maintenance des pipelines CI/CD. 

L'introduction de Dagger.io pourrait transformer des tâches de CI/CD auparavant simples, gérées par quelques lignes de YAML, en processus plus complexes nécessitant une configuration étendue et des scripts multi-langages. Cette complexité pourrait non seulement ralentir le processus de développement mais aussi augmenter le risque d'erreurs dans la configuration des pipelines.

De plus, l'intégration poussée de divers outils et services dans un pipeline Dagger.io peut augmenter la charge cognitive pour les équipes. 
Par exemple, si un pipeline implique l'intégration de tests automatisés, de déploiements sur plusieurs environnements, et de notifications via divers canaux de communication, la configuration et le débogage de ce pipeline pourraient devenir significativement plus complexes comparés à un outil spécialisé ou à une solution plus simple.

### Exemple d'Utilisation : Un Pipeline CI/CD avec Dagger.io

Pour illustrer l'application pratique de Dagger.io, envisageons un scénario où une équipe souhaite automatiser la vérification de la qualité du code dans son projet. L'exemple suivant en Python montre comment Dagger.io peut être utilisé pour créer un pipeline de CI qui vérifie le style et les erreurs dans le code Python, en utilisant des outils comme [flake8](https://github.com/pycqa/flake8) et [mypy](https://github.com/python/mypy).

```python
import sys
import anyio
import dagger

async def code_quality_check():
    async with dagger.Connection(dagger.Config(log_output=sys.stderr)) as client:
        src = client.host().directory("./src")
        quality_checker = (
            client.container().from_("python:3.10-slim-buster")
            .with_exec(["pip", "install", "flake8", "mypy"])
            .with_mounted_directory("/code", src)
            .with_workdir("/code")
            .with_exec(["flake8", "."])
            .with_exec(["

mypy", "."])
        )
        await quality_checker.stdout()

if __name__ == "__main__":
    anyio.run(code_quality_check)
```

Ce script crée un conteneur, installe flake8 et mypy, monte le répertoire du code source, et exécute les vérifications de style et de type. Dagger.io facilite ce processus, rendant le pipeline de CI/CD plus fiable.

## Dagger.io est-il la fine lame espérée ?

Dagger.io représente une avancée significative dans le domaine du CI/CD, offrant une plateforme robuste et adaptable pour les processus de développement logiciel. Alors que le monde de la technologie continue d'évoluer, des outils comme Dagger.io joueront un rôle crucial en permettant aux équipes de rester agiles, cohérentes et efficaces dans leurs pratiques de développement. Bien que l'adoption de Dagger.io puisse présenter des défis initiaux, les avantages à long terme en termes de flexibilité, de portabilité et d'intégration en font une option attrayante pour les entreprises soucieuses d'optimiser leurs opérations de développement logiciel.

À mesure que Dagger.io continue de se développer et de s'enrichir en fonctionnalités, sa communauté d'utilisateurs est susceptible de croître, offrant encore plus de ressources, de partages d'expériences, et de soutien pour les équipes adoptant cette plateforme. Les possibilités offertes par Dagger.io sont vastes, et son exploration peut ouvrir de nouvelles voies d'innovation et d'efficacité dans le développement logiciel.