Aller au contenu

Surveiller les exécutions de pipeline

Cette page couvre tout ce qui vient après le démarrage d’une exécution : la trouver, lire ce que chaque étape a fait et remettre en marche une exécution échouée. Pour en lancer une, voir Exécuter un pipeline manuellement.

  1. Cliquez sur Pipelines dans la barre latérale de l’espace de travail. L’écran affiché est la file d’attente des exécutions de l’espace de travail — toutes les exécutions, de la plus récente à la plus ancienne.
  2. Utilisez la barre latérale gauche pour filtrer. Il y a exactement trois filtres, chacun avec un compteur en direct : Tous, Running, Failed.
  3. Parcourez le tableau avec ↑/↓ (ou j/k) et appuyez sur Enter pour ouvrir l’exécution ciblée. Cliquer sur une ligne fait la même chose.

Chaque ligne affiche une icône indiquant comment l’exécution a démarré (un triangle de lecture pour un lancement manuel; une icône de fichier pour une surveillance du graphe de code; sinon le déclencheur automatique). L’infobulle nomme le déclencheur — Manuel, PR publiée, Modification de fichier, etc. — et, pour une exécution de surveillance, les fichiers modifiés. Viennent ensuite le nom du pipeline, un badge d’état, la durée active (ou la position dans la file d’attente pour une exécution queued) et depuis combien de temps cette tentative a commencé. La durée active exclut les pauses entre un arrêt et un redémarrage; ce n’est donc pas le temps réel écoulé.

Il n’existe aucun filtre pour les exécutions terminées, suspendues ou annulées, aucun filtre par modèle, aucune fenêtre temporelle et aucune vue d’historique des exécutions par modèle. Pour comparer les exécutions d’un même modèle, il faut parcourir la file d’attente à la recherche de son nom.

La page d’une exécution comporte trois parties superposées.

Le bandeau de métadonnées porte l’heure de départ, la durée active, la progression des étapes (« 3 sur 7 étapes »), un résumé d’échec nommant l’étape qui a échoué et la raison, ainsi que les actions Réessayer et Supprimer.

La cascade des durées affiche une barre par étape, avec sa durée et — pour les étapes d’agent — son coût en cents. Une étape réessayée affiche le suffixe ×N après sa durée; ce suffixe est le seul endroit où le nombre de tentatives apparaît.

Le canevas du graphe dessine le modèle avec le statut en direct de chaque nœud. Sélectionner un nœud ouvre son panneau d’étape.

Statut Signification
Pending Créée, pas encore démarrée
En file d’attente Admise mais retenue : le plafond d’exécutions parallèles de ce modèle est atteint; aucune ligne d’étape encore
Running En cours d’exécution
Suspended En attente d’un élément externe — normal, pas bloquée
Completed Terminée avec succès
Failed Terminée par une erreur
Cancelled Arrêtée par un utilisateur ou par le système

Les étapes ont ces statuts, moins En file d’attente, plus Skipped, pour une branche qu’un routeur n’a pas empruntée (et ses descendants désormais inaccessibles).

Suspended est le statut dans lequel une étape d’agent passe la majeure partie de sa vie : un agent lancé ou une porte d’approbation retient l’étape jusqu’à ce que son travail aboutisse. Deux filets de sécurité du moteur font échouer toute l’exécution plutôt que de la reprendre : une étape suspendue depuis plus de 24 heures (extras.awaitApproval — le corps orchestration.awaitApproval — est exempté; human.gate ne l’est pas) et une étape non idempotente qui était en cours d’exécution quand le serveur s’est arrêté.

Sélectionnez un nœud sur le canevas. Le panneau d’étape affiche, dans l’ordre :

  • Un encadré Erreur lorsque l’étape a échoué, ou un encadré Ignoré avec la raison lorsqu’elle a été ignorée.
  • Démarré, Terminé et la durée.
  • Branche — l’index de branche, pour les branches parallèles.
  • Voir la conversation — saute à la conversation dans laquelle l’étape s’est exécutée. Les conversations de pipeline sont masquées dans la barre latérale; c’est donc le seul moyen d’y accéder.
  • Entrée et Sortie, en JSON repliable.
  • Activité de l’agent — une tuile par exécution d’agent lancée par l’étape, avec son statut, son résumé, sa durée et son coût.

Pour une étape d’agent, Sortie est la charge utile structurée que l’agent a soumise avec submit_output, et non sa prose. La trace de raisonnement se trouve dans Activité de l’agent et dans la conversation derrière Voir la conversation.

Pour une étape bash, Sortie est le stdout tronqué que le script a écrit à la sortie 0. Une sortie avec un code non nul fait échouer l’étape, avec la fin de stderr comme message d’erreur.

  1. Lisez le résumé d’échec du bandeau de métadonnées; il nomme l’étape qui a échoué. L’encadré Erreur du panneau d’étape contient le message.
  2. Vérifiez l’Entrée de l’étape — une clé d’état manquante ou mal orthographiée est la cause la plus fréquente. Une étape d’agent à prompt échoue d’emblée et nomme les espaces réservés non résolus; une étape bash les remplace par des chaînes vides et s’exécute quand même, ce qui se manifeste généralement une étape plus loin.
  3. Pour une étape d’agent, ouvrez Voir la conversation et lisez ce que l’agent a réellement fait.
  4. Appuyez sur Réessayer dans le bandeau de métadonnées. Les étapes Completed et Skipped conservent leurs sorties; tout le reste est supprimé et réexécuté, et l’exécution repasse à Running. Le compteur de durée repart pour cette tentative.

Causes fréquentes à vérifier en premier :

  • Délai d’expiration — l’étape a dépassé son Délai d’expiration (ms). Rappelez-vous que le champ est en millisecondes.
  • Erreur de script — la commande bash s’est terminée avec un code non nul, ou bash ne se trouve pas dans le PATH de l’hôte du serveur.
  • Validation de schéma — la charge utile submit_output de l’agent ne satisfaisait pas le schéma de sortie de l’étape.
  • Espace réservé non résolu — un {{key}} référencé par une étape d’agent à prompt n’a jamais été écrit en amont. L’erreur nomme chaque clé non résolue.
  • Corps non enregistré — une étape dont la clé de corps n’est pas enregistrée avertit au chargement du modèle, puis ne s’exécute tout simplement jamais.

Sélectionnez l’étape en cours d’exécution et appuyez sur le bouton Arrêter l’exécution dans l’en-tête du panneau d’étape. Cela tue le processus de l’étape, marque l’étape comme Failed et fait donc échouer toute l’exécution — chaque branche sœur ouverte est fermée avec elle.

Il n’existe aucun contrôle d’annulation d’exécution sur cet écran. pipeline.cancel existe comme opération RPC et le moteur l’implémente, mais rien dans l’interface des pipelines ne l’appelle; Arrêter l’exécution sur une étape, ou Supprimer sur l’exécution, sont les seuls gestes d’arrêt disponibles.

Le coût est indiqué par étape, dans la colonne de droite de la cascade et sur chaque tuile sous Activité de l’agent. Il n’y a pas de total d’exécution sur la page de détail ni de colonne de coût dans la file d’attente des exécutions; comparer le coût de deux exécutions revient donc à additionner leurs étapes.