Interface de pipeline
Un pipeline peut déclarer un contrat d'appel : les entrées qu'il attend du workflow, et les sorties qu'il lui renvoie. Un workflow devient alors capable d'enchaîner des pipelines et de brancher sur leurs résultats.
La déclaration se fait dans l'onglet Interface de l'éditeur de pipeline.
Entrées
| Champ | Rôle |
|---|---|
| Nom | Identifiant utilisé par l'appelant. Lettres, chiffres et tirets bas. |
| Nature | Valeur (scalaire) ou DataFrame. |
| Type | Texte, Nombre, Entier ou Booléen — pour une valeur. |
| Obligatoire | Le déploiement est refusé si un appelant ne la fournit pas. |
| Défaut | Valeur retenue quand une entrée facultative n'est pas fournie. |
Une valeur se lit partout dans le pipeline via ${var.workflow.NOM}.
Une DataFrame entre par une brick Entrée workflow, qui référence l'entrée par son nom.
Sorties
Une valeur se lit depuis le workflow via ${(nom_du_noeud).NOM}, où
nom_du_noeud est le libellé de la brick « Exécuter un pipeline » qui a fait
l'appel. Les parenthèses permettent les libellés à espaces ou à accents.
Une DataFrame se câble en aval : la brick « Exécuter un pipeline » expose un port par sortie DataFrame déclarée, renseigné automatiquement dès que le pipeline cible est choisi. Le port se relie ensuite à une boucle ou à un autre pipeline.
Une boucle peut aussi se brancher sur la sortie Success : le port dédié
désigne alors la sortie par le câblage, tandis que Success la porte parmi les
autres et demande de la nommer.
Les deux se produisent avec une brick Retour workflow.
Noms réservés
Le moteur fournit ces membres sur tout appel, quel que soit le pipeline :
| Membre | Contenu |
|---|---|
status | success ou fail |
exit_code | Code de sortie du sous-pipeline |
duration | Durée en secondes |
start_time | Instant de démarrage |
logs | Journal formaté de l'exécution |
Une sortie ne peut pas porter l'un de ces noms : la collision est refusée à la déclaration, ce qui évite d'alourdir toutes les lectures d'un préfixe.
Lire un résultat depuis le workflow
${(Récupérer le format).format} == "xml"
Le libellé entre parenthèses est celui de la brick « Exécuter un pipeline » qui
a fait l'appel — espaces et accents compris. Les membres du moteur se lisent de
la même façon : ${(Récupérer le format).status}.
Ces références s'utilisent dans une Condition, mais aussi dans n'importe quel champ de brick — un message d'alerte, une requête, un chemin de fichier.
Dans une Condition, les références sont remplacées par des littéraux Python
et non par du texte brut : ${...} == "xml" compare donc bien deux chaînes. Une
valeur numérique reste un nombre, et une valeur à zéros de tête comme 0042
reste une chaîne — sa conversion en 42 fausserait la comparaison.
Tout ou rien
Les sorties sont publiées ensemble ou pas du tout, à deux conditions : le pipeline s'est terminé sans erreur, et il a produit toutes les sorties qu'il déclare.
Un pipeline qui réussit sans produire une sortie déclarée est en violation de contrat : l'appel sort par Fail, et rien n'est publié. Sans cette symétrie, une condition en aval lirait une valeur vide sans pouvoir distinguer « absente » de « fausse ».
Versionnée avec le contenu
L'interface est enregistrée dans le contenu du pipeline, donc figée dans chaque version. Ajouter une entrée obligatoire ne casse pas un workflow épinglé sur une version antérieure.
Contrôle au déploiement
Le lien workflow → pipeline étant connu à l'avance, les incompatibilités sont détectées au déploiement plutôt qu'en production :
- une entrée obligatoire qu'un appelant ne fournit pas ;
- une référence
${(nœud).membre}vers un appel inexistant ; - une référence vers une sortie que le pipeline cible ne déclare pas.
Un pipeline qui ne déclare aucune interface n'est pas contrôlé : les workflows antérieurs continuent de fonctionner sans modification.
La liste Variables transmises de la brick « Exécuter un pipeline » accepte
aussi des noms non déclarés : ils restent de simples variables de workflow,
lisibles via ${var.workflow.NOM}. Seules les entrées déclarées obligatoires
sont exigées.