Aller au contenu

Créer un modèle de pipeline

Les modèles de pipeline se créent dans les paramètres de l’espace de travail. L’entrée Pipelines de la barre latérale de l’espace de travail est la file d’attente des exécutions, et non la liste des modèles — elle n’offre aucune action « créer un modèle ».

Pour savoir ce que signifient chaque type d’étape, chaque clé de corps et chaque champ de configuration, consultez la référence des étapes de pipeline.

  1. Allez dans Paramètres → Espace de travail → Modèles de pipeline (/workspaces/<workspace-id>/settings/pipelines).
  2. Appuyez sur Nouveau modèle.

Il n’y a aucune boîte de dialogue d’identifiant. L’éditeur s’ouvre immédiatement sur un squelette amorcé nommé Nouveau pipeline, avec un identifiant alloué automatiquement (pipeline_1, puis pipeline_2, …). Cliquez sur le titre dans l’en-tête pour le renommer.

Le canevas n’est pas vide : un nœud d’entrée Déclencheur, un nœud d’agent de prompt étiqueté Step et une sentinelle terminale qui met fin à l’exécution. La sentinelle n’est pas dessinée. L’éditeur relie ce terminal masqué à chaque puits atteignable, de sorte que le travail que vous rattachez après Step s’exécute quand même.

La barre latérale Bibliothèque de nœuds est toujours à gauche de l’éditeur. Filtrez-la avec la zone Rechercher des nœuds et glissez une entrée sur le canevas — le nœud se dépose là où vous le relâchez, sans connexion entrante.

Nœud de la palette Type d’étape Ce qu’il fait
Bash script listen Exécute un script shell avec substitution de {{state}}; aucun agent lancé
Open conversation listen Ouvre l’unique espace visible de l’exécution et sa copie de travail; les nœuds d’agent rejoignent ce salon
Clone PR branch listen Découvre la branche de tête de la PR au moyen de gh pr view et la clone dans le répertoire de l’exécution
Post PR comment listen Publie les constats consolidés dans la PR sous forme de commentaire de révision GitHub
Reviewer (prompt) listen Lance un agent relecteur spécialisé; suspend l’étape jusqu’à ce que l’agent soumette son résultat
Consolidate (join) join Attend plusieurs branches en amont, puis demande à un agent de consolider leurs sorties
Custom prompt listen Nœud générique piloté par un prompt, acheminé par le corps promptAgent
Post to space listen Envoie un message dans un salon de messagerie
Condition / switch (router) router Crée un embranchement selon une valeur d’état
If file exists (router) router Achemine "true" lorsqu’un chemin existe sous la copie, sinon "false"
Any file exists (OR router) router Achemine "true" lorsqu’au moins un chemin listé existe
All conditions (AND router) router Achemine "true" seulement lorsque tous les chemins listés existent
Team dispatch listen Lance une équipe entière et suspend l’étape jusqu’à ce qu’elle termine
Approval gate listen Met l’exécution en pause en attendant une décision d’approbation
For each (map) forEach Génère un prompt par élément, puis lance l’agent une seule fois avec ces prompts réunis
Call sub-pipeline listen Exécute un autre modèle comme étape imbriquée
Clean up worktrees listen Supprime les arbres de travail isolés obsolètes; déterministe, aucun agent lancé

La bibliothèque les regroupe sous Flux et logique, Revue de PR, Agents, Messagerie et Code. Il n’existe aucun groupe Demo.

Chaque nœud de travail a un port de sortie circulaire sur son bord droit. Glissez depuis ce port vers un autre nœud pour les relier. Les déclencheurs de départ fonctionnent de la même façon : chacun possède son propre port, de sorte qu’un fil partant de Calendrier ne quitte pas aussi Exécution manuelle. Appuyez sur Ajouter une étape (+) juste après un nœud pour insérer un type à sa suite. Survolez le milieu d’une arête existante et appuyez sur × pour la déconnecter.

Les connexions se modifient aussi depuis le nœud qui les reçoit :

  1. Sélectionnez le nœud en aval. Son panneau de configuration s’ouvre à droite.
  2. Faites défiler jusqu’à Déclencheurs en amont et touchez la puce de chaque nœud amont que celui-ci doit écouter. Toucher une puce sélectionnée supprime la connexion.
  3. Si un nœud en amont est un routeur, un bloc Clés de route apparaît sous les puces, avec un champ Clé de route depuis <node> par arête de routeur. Saisissez la clé sur laquelle cette arête se déclenche — true ou false pour les routeurs de présence de fichier, ou le nom du cas pour un aiguillage.

Chaque nœud déclencheur est un point d’entrée. Un nœud peut écouter plusieurs nœuds en amont (entrées multiples) et en alimenter plusieurs en aval (sorties multiples), et le graphe doit rester acyclique — rien dans l’éditeur ne vous empêche de câbler un cycle, alors vérifiez votre travail.

La sentinelle terminale est filtrée du canevas, de sorte qu’elle ne peut pas être sélectionnée. L’éditeur la relie à chaque puits atteignable dès que le graphe change, de sorte que le travail que vous rattachez après le Step amorcé s’exécute quand même. Un graphe vide (déclencheur sans successeur de travail) liste le déclencheur lui-même pour qu’une exécution se termine immédiatement.

Sélectionnez un nœud pour ouvrir son panneau de configuration. Les champs affichés dépendent du corps du nœud.

Chaque nœud a Libellé, Clés d’entrée (clés d’état séparées par des virgules, lues au moment de l’exécution) et, sous Avancé, Réducteur, Délai d’expiration (ms), Tentatives de réessai, Continuer en cas d’échec et Schéma de sortie. Les nœuds listen et join peuvent aussi permuter leur Type entre les deux.

Ajoute un sélecteur de portée des dépôts (quels dépôts de l’espace de travail cloner; vide signifie aucun), un Nom de l’espace et une case à cocher Y ouvrir une conversation. Lorsque cette case est cochée, un champ Nom de la conversation nomme le fil avec lequel le salon s’ouvre. Les nœuds d’agent rejoignent ce salon — ils n’en ouvrent pas un eux-mêmes.

Ajoute Agent (quel agent lancer), Prompt (utilisez {{key}} pour référencer les entrées ou les sorties en amont) et Clé de sortie.

Délai d’expiration (ms) est en millisecondes, et non en secondes — 900000 correspond à 15 minutes. Saisir 900 donne 0,9 seconde à l’étape.

Le mode de conversation sous lequel s’exécute un nœud d’agent de prompt n’a aucun champ dans l’éditeur sur le nœud d’agent. Il passe par extras['mode'] (chat, plan ou review) sur le nœud Open conversation qui a créé le salon (review par défaut). Le définir sur une étape d’agent est ignoré. La clé exige une correspondance exacte : toute autre graphie est ignorée silencieusement.

Ajoute Script. Il n’y a aucun champ de répertoire de travail ni d’environnement, car ni l’un ni l’autre n’est configurable :

  • Chaque étape bash d’une exécution partage le répertoire courant <cc_root>/pipelines/<runId>/.
  • GITHUB_TOKEN est injecté depuis le magasin d’identifiants, de sorte que gh et git clone https://x-access-token:$GITHUB_TOKEN@… fonctionnent sans configuration.
  • Le script est lancé comme exécutable littéral bash, de sorte que bash doit se trouver dans le PATH de l’hôte du serveur. C’est une considération Windows.

Un routeur évalue une condition et retourne une clé de route; le moteur ne déclenche que l’arête en aval dont la clé de route correspond et marque les autres branches comme ignorées.

Sélectionner un routeur remplace le champ Clé de sortie par l’éditeur de condition. Choisissez l’un de ses quatre modes :

  • Fichier(s) présent(s) — au moins un — achemine "true" lorsqu’au moins un chemin listé existe.
  • Fichiers présents — tous — achemine "true" seulement lorsque tous les chemins listés existent.
  • Comparaison — compare une valeur d’état à une valeur littérale.
  • Aiguillage — achemine selon la valeur d’une clé d’état, avec un cas par défaut.

Définissez ensuite les clés de route correspondantes sur les arêtes sortantes (voir Relier les nœuds entre eux).

Les groupes booléens and / or / not sont pris en charge par le corps, mais ne peuvent pas être créés depuis ce formulaire — ils exigent un arbre de prédicats écrit à la main sous extras.predicate. Le vocabulaire complet des prédicats et des opérateurs se trouve dans la référence des étapes de pipeline.

Aucune configuration propre : il attend toutes ses étapes en amont.

La porte lance l’agent approbateur dans une conversation masquée avec le prompt de la porte, puis suspend l’étape. L’approbateur sollicite votre décision dans la conversation et la soumet avec submit_output sous la forme { "decision": "approved" | "rejected", "reason": "..." }. La décision est consignée sous la clé de sortie (approval_decision par défaut), de sorte qu’un routeur d’aiguillage en aval peut s’y brancher.

Définissez Agent sur l’approbateur et Prompt sur la question de la porte. La porte se résout par submit_output sous la forme { "decision": "approved" | "rejected", "reason": "..." }. Les nœuds Reviewer (prompt) soumettent de la même façon.

Ajoute ID d’équipe et Mode de répartition. Le sélecteur offre exactement deux modes :

  • allParallel — une tâche par membre, suspend l’étape jusqu’à ce que toutes soient terminées.
  • manager — lance le responsable, qui délègue.

Toute autre valeur stockée se comporte comme allParallel. Définissez Réducteur sur append pour recueillir le résultat de chaque membre dans une liste sous la clé de sortie.

For each parcourt la clé d’état items par défaut (extras.iterableKey / extras.itemKey sur le nœud). Il génère son prompt une fois par élément ({{item}} par défaut) et lance l’agent une seule fois avec ces prompts concaténés. Une collection vide se termine immédiatement avec une liste vide. Il ne s’agit pas d’un lancement parallèle par élément.

Call sub-pipeline suspend l’étape jusqu’à ce que l’exécution enfant atteigne un état terminal, puis fusionne l’état final de l’enfant sous la clé de sortie (subflow_result par défaut). Pointez-le vers un enfant avec extras.templateId. Un modèle ne peut pas s’appeler lui-même; un enfant en échec ou annulé fait échouer l’étape parente, qui alimente alors la politique de nouvelle tentative et de continuation en cas d’échec de cette étape.

Déclarer les entrées et autoriser les exécutions manuelles

Section intitulée “Déclarer les entrées et autoriser les exécutions manuelles”

Les deux se trouvent derrière Exécution manuelle dans l’en-tête de l’éditeur.

  1. Appuyez sur Exécution manuelle.
  2. Activez Autoriser l’exécution manuelle. Cet interrupteur est enregistré immédiatement — il crée (ou supprime) la ligne de déclencheur manual qui fait apparaître le modèle dans le sélecteur d’exécution.
  3. Définissez Exécutions parallèles max si vous voulez un plafond (laissez vide pour illimité). Les démarrages supplémentaires attendent dans un état queued jusqu’à ce qu’une place se libère.
  4. Appuyez sur Ajouter une entrée pour chaque champ de formulaire qu’une exécution manuelle doit recueillir :
Champ Description
Clé Clé d’état sous laquelle la valeur est stockée; référencez-la sous la forme {{key}}
Libellé Libellé affiché (par défaut, la clé)
Type Texte, Texte multiligne, Nombre, Bascule, Liste déroulante, Dépôt
Options Choix séparés par des virgules, pour la liste déroulante seulement
Valeur par défaut Valeur préremplie
Texte indicatif Texte d’indication à l’intérieur du champ vide
Texte d’aide Texte auxiliaire sous le champ
Obligatoire Indique si le formulaire d’exécution bloque sur une valeur vide

Une entrée Dépôt affiche un sélecteur parmi les dépôts de l’espace de travail et inscrit repo_id, repo_local_path, repo_full_name et — lorsque le dépôt a un dépôt distant GitHub — repo_owner et repo_name dans la charge utile de l’exécution.

  1. Appuyez sur Enregistrer dans la boîte de dialogue. Les modifications d’entrée sont intégrées à l’ébauche; elles sont conservées lorsque vous enregistrez le modèle.
  1. Appuyez sur Enregistrer dans l’en-tête de l’éditeur. L’en-tête affiche « Modifications non enregistrées » tant que vous ne l’avez pas fait.
  2. Revenez à Paramètres → Espace de travail → Modèles de pipeline et vérifiez que l’interrupteur de la ligne du modèle est activé. Le moteur refuse de démarrer un modèle désactivé, et un modèle désactivé n’apparaît jamais dans le sélecteur d’exécution.
  3. Pour le démarrer automatiquement, glissez un déclencheur depuis la bibliothèque de nœuds sur le canevas — voir Configurer des déclencheurs de pipeline.