Optimiser vos CI gitlab avec les DAG

En bon gitops on cherche tous à optimiser les temps de déploiement de nos applications, et bien voici une nouveauté du CI de Gitlab qui va permettre d’y parvenir: les DAG pour Directed Acyclic Graphs.

Les DAG de Gitlab

les DAG de Gitlab

Arrivés avec la version 12.2 de Gitlab, les DAG apporte les outils nécessaires pour optimiser les pipelines. Dans le contexte des pipelines GitLab, un DAG est une chaîne de travaux créée en spécifiant les dépendances entre les travaux. Cela permet la parallélisation des travaux mais par contre ne permet pas la création de plusieurs pipelines.

Prenons l’exemple d’un simple pipeline composé de trois stages : build, test et deploy. Dans l’exemple ci-dessous j’ai omis de mettre la partie script pour simplifier au possible l’exemple.

stage:
- build
- test
- deploy

build-image:
stage: build

deploy-hors-prod:
stage:build

scan-image:
stage: test

test-integration:
stage: test

deploy:
stage: deploy

Par exemple on aimerait que le scan de l’image docker puisse démarrer sans attendre la fin du déploiement en hors prod. Et bien il suffit d’ajouter la clé needs:

stage:
  - build
  - test
  - deploy

build-image:
  stage: build

deploy-hors-prod:
  stage: build
  needs:
    - build-image

scan-image:
  stage: test
  needs:
    - build-image

test-integration:
stage: test

deploy:
stage: deploy
  needs:
    - test-integration

Faites attention car si vous oubliez un needs certaines taches se lancerons en cas d’échec. De plus l’interface de GitLab n’a pas changé et donc les relations du type needs ne seront pas indiqué ce qui un peu compliqué le débugage. Espérons que cela finira par être implémenté.


Alimenter un blog comme celui-ci est aussi passionnant que chronophage. En passant votre prochaine commande (n'importe quel autre article) au travers des liens produits ci-contre, je touche une petite commission sans que cela ne vous coûte plus cher. Cela ne me permet pas de gagner ma vie, mais de couvrir les frais inhérents au fonctionnement du site. Merci donc à vous!

comments powered by Disqus