Loading search data...

Dagger un nouvel outil CI/CD

Solomom Hykes, qui est le fondateur de Docker qu’il a vendu par la suite , lance un nouveau projet nommé Dagger . Dagger à l’ambition de devenir un outil agnostique permettant d’exécuter des pipelines CI/CD. Pour cela les pipelines sont écrit dans un langage déclaratif appelé CUE (configurer, unifier, exécuter). Par la suite, Dagger deviendra une plateforme d’exécution dans le Cloud qui sera optionnel.

Dagger ne cherche pas à remplacer pas nos outils CI/CD habituels, il les améliore en y ajoutant une couche d’abstraction. En effet, Dagger peut tourner sur la plupart des produits de CI/CD existant (Jenkins, Gitalb, Github, …), mais aussi localement.

dagger

Les principaux gains que je vois :

  • Les devs vont être ravie de ne pas écrire leur code en YAML mais en CUE dérivé de JSON. Un peu comme le HCL d’Hashicorp.
  • Dagger peut être exécuté localement, et peut remplacer tout autre outil comme Makefile.
  • On peut de changer de plateforme CI/CD sans rien réécrire.

Installer Dagger

Attention c’est encore un produit en cours de développement et donc sujet à changement. Il y a eu une belle rupture entre la version 0.1 et la 0.2 qui apporte une CLI repensée et l’arrivée d’une API.

cd /usr/local
curl -L https://dl.**Dagger**.io/**Dagger**/install.sh | sudo sh
**Dagger** version
**Dagger** 0.2.4 (b32c8732) linux/amd64

Débuter avec Dagger

Il faut que Docker soit installé sur le poste de développement, car dagger utilise buildkit pour exécuter les plans.

Le mieux est de télécharger un exemple qui permet de builder, tester et deployer une application react.

git clone https://github.com/dagger/dagger.git
cd pkg/universe.dagger.io/examples/helloworld

Le contenu du fichier cue :

// dagger do hello --log-format=plain
//
// 9:06AM INF actions._alpine | computing
// 9:06AM INF actions._alpine | completed    duration=1s
// 9:06AM INF actions.hello | computing
// 9:06AM INF actions.hello | #3 0.073 hello, world!
// 9:06AM INF actions.hello | completed    duration=100ms
package helloworld

import (
        "dagger.io/dagger"
        "dagger.io/dagger/core"
)

dagger.#Plan & {
        actions: {
                _alpine: core.#Pull & {source: "alpine:3"}
                // Hello world
                hello: core.#Exec & {
                        input: _alpine.output
                        args: ["echo", "hello, world!"]
                        always: true
                }
        }
}

Un package Dagger :

  • fait appel à des librairies, ici core, mais il en existe d’autres
  • contient un plan dagger.#Plan
  • interagit avec des clients : fichiers, …
  • exécute des actions

Ici le plan exécute l’action hello qui lance une commande dans un container construit avec l’image alpine:3.

Lancement du pipeline

dagger do hello --log-format=plain
1:00PM INF actions._alpine | computing
1:00PM INF actions._alpine | completed    duration=2s
1:00PM INF actions.hello | computing
1:00PM INF actions.hello | completed    duration=500ms
1:00PM INF actions.hello | #3 0.087 hello, world!

Plus loin

Débuter avec Dagger n’est pas si simple, faut dire que ce nouveau langage est un peu compliqué. Mais je trouve le projet génial et prometteur de par cette volonté de le rendre agnostique et le fait qu’il puisse être exécuté en local : Fini les push à gogo pour les debugger.

Quelques points à éclaircir :

  • Comment sont gérés les secrets ?
  • Existe-t-il un mode exécution à distance ?
  • Factorisation du code, écriture de module, repo ?
  • Extension vs code ?

Je compléterai le billet à fait de mes découvertes.

Plus d’infos sur le site du projet dagger.io et github.com


Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur   Ko-Fi  . Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne nous coûte plus cher, via   ce lien  . Vous pouvez aussi partager le lien sur twitter ou linkedin via les boutons ci-dessous. Je vous remercie de votre soutien


Mots clés :

devops tutorials kubernetes

Autres Articles


Commentaires: