Nous avons vu dans un précédent article précédent article comment mettre en place un processus automatisé d’intégration continue avec Talend. Si vous ne l’avez pas lu, n’hésitez pas à aller y jeter un œil !
Le but de cet article est de vous présenter une solution permettant de facilement gérer plusieurs pipelines CICD, en se basant sur les fonctionnalités de parallélisation des matrices.
C’est une approche intéressante qui permet de piloter et orchestrer plus facilement un environnement Talend multi-projets (tel que celui dans l’article cité ci-dessus).
Gitlab CI : Pipeline multi-projets
Implémenter les projets Talend d’un pipeline
Un environnement Talend peut contenir très rapidement plusieurs projets, chacun avec des périmètres fonctionnels distincts mais parfois utilisant des paramètres communs. Comme vu dans notre article précédent, chaque projet possède un pipeline CICD (gitlab-ci.yml) qui lui est propre .
Ce pipeline possède donc ses propres paramètres, et peut également partager des paramètres sensibles comme des clés de sécurité, mots de passe, etc. avec d’autres projets. Mettre à jour une variable commune de ces multiples pipelines reviendrait à la modifier manuellement dans chaque fichier de définition du pipeline (YAML). Il existe des solutions pour piloter et maintenir ces variables efficacement.
Pour avoir un exemple de pipeline projet, vous pouvez vous référer sur l’article précédent.
Créer un pipeline pilote
Le plus simple pour créer ce pipeline pilote est de le mettre dans un projet Gitlab à part. Ce projet doit être idéalement dans le même groupe/namespace que celui des projets Talend (dans le cas contraire, il faudra jouer sur les privilèges pour réussir à atteindre les Git repository).
Lancement en parallèle des pipelines
Les différents pipelines projets vont être lancés en simultané par le pipeline pilote, par le biais d’une matrice de déclenchement parallèle. En plus de déclencher les pipelines en simultané, elle permet de surcharger la valeur des variables contextuelles utilisées dans le pipeline projet.
Exemple de pipeline pilote
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "web"'
when: always # Activation par l'interface Web
allow_failure: true
- when: never # Évite de déclencher le pipeline sur un push
variables:
#/!\ Variables qui surchargeront la totalité des pipelines /!\
PATCH: "https://update.talend.com/Studio/8/updates/R2023-03/"
triggering-job: # Déclencheur de pipeline de projet
trigger:
project: $CI_PROJECT_NAMESPACE/$DOWNSTREAM_PROJECT
branch: $DOWNSTREAM_BRANCH
strategy: depend # Attendre la fin des pipelines déclenchés pour le résultat
parallel:
matrix:
#Projet Talend 1
- ACTIVE: "true" # Activer le projet1 dans la matrice
DOWNSTREAM_PROJECT: projet1
DOWNSTREAM_BRANCH: master
JOB_LIST_TO_PUBLISH: purge_des_fichiers_temporaires_0.1
#Projet Talend 2
- ACTIVE: "true" # Activer le projet2 dans la matrice
DOWNSTREAM_PROJECT: projet2
DOWNSTREAM_BRANCH: master
JOB_LIST_TO_PUBLISH: transfert_donnees_quotidiennes_0.1
#Projet Talend 3
- ACTIVE: "true" # Activer le projet3 dans la matrice
DOWNSTREAM_PROJECT: projet3
DOWNSTREAM_BRANCH: master
JOB_LIST_TO_PUBLISH: [compta_0.1, rh_0.1]
rules:
- if: '$ACTIVE == "true"'
allow_failure: true
L’exemple ci-dessus reprend les trois projets Talend sur le schéma présenté précédemment. Les liens hypertextes vous renvoient vers la documentation officielle de Gitlab pour savoir précisément à quoi sert le mot-clé en question.
La partie rules présente à la fin du script utilise la variable ACTIVE utilisée dans les matrices. Si cette variable de matrice est activée (avec la valeur true), la règle autorisera à la matrice le déclenchement du pipeline projet.
Explication du comportement du pipeline
Le pipeline se déclenche avec le job “triggering” et lance en parallèle les différents pipelines des projets listés dans la matrice.
L’avantage notable de ce fonctionnement est le traitement en parallèle des différents jobs. Cela nous permet par exemple de rapidement appliquer un patch Talend à plusieurs projets Talend, et vérifier le bon fonctionnement du déploiement des jobs existants.
L’avantage d’un pipeline pilote est donc de lancer en parallèle plusieurs pipelines de déploiement de projets, tout en facilitant la maintenance des différentes informations communes (patch Talend, access key, secret key de manière sécurisée via le mask/protect des variables CICD etc…)