Aller au contenu

Session 23 — Debug pipeline SSH → Robot Framework PASS

Durée : ~8h
Objectif : Résoudre tous les blocages de la session 21 et obtenir le premier PASS complet CT-001


Résumé exécutif

Session de debug intensif. Après ~8h d'investigations, le premier test automatisé CT-001 s'est exécuté avec succès via le pipeline complet :

Squash TM → Orchestrateur → SSH → git clone perfshop-tests → robot → PASS ✅

CT-002 (Selenium) lancé et validé en fin de session.


Problèmes résolus

1 — SSH_CHANNEL_* variables écrasaient sshee.yaml

Les variables SSH_CHANNEL_HOST/USER/PASSWORD/TAGS dans le compose forçaient targets=['agents'] dans le code Python du sshee, ignorant silencieusement sshee.yaml.

Fix : Suppression de toutes les variables SSH_CHANNEL_* du compose orchestrateur.

2 — Namespace "default" non trouvé

Le sshee.yaml n'avait pas namespaces: default dans l'entrée du pool, et targets: [default] manquait dans le contexte allinone.

Fix : sshee.yaml avec targets: [default] et namespaces: default dans le pool.

3 — agentchannel Java annulait avant sshee Python

L'agentchannel Java (port 24368) répondait "not found" immédiatement, annulant le workflow avant que le sshchannel Python soit consulté.

Fix : agentchannel ajouté dans la liste disabled du squashtf.yaml.

4 — pending_timeout_minutes à 0

L'arranger annulait le workflow instantanément faute de timeout.

Fix : arranger.yaml avec pending_timeout_minutes: 5 pour le contexte allinone.

5 — squash.rest-api.jwt.secret commenté

L'orchestrateur recevait un 401 throwNotExistOrSetLastUsage sur toutes ses requêtes.

Fix : Propriété décommentée dans squash.tm.cfg.properties + montée en volume.

6 — Token JWT RSA invalide

Le token dans Squash TM ne correspondait pas à la clé publique montée dans l'orchestrateur.

Fix : Nouvelle paire RSA 4096 générée avec opentf-ctl, trusted_key.pub montée dans /etc/squashtf/.

7 — SCM non configuré

Le tm-community-generator ne pouvait pas générer de workflow sans serveur SCM.

Fix : Serveur PerfShop GitLab associé au projet + dépôt perfshop-tests (main) cloné.

8 — SQUASH_REST_API_JWT_SECRET dans l'orchestrateur

Variable non documentée qui causait throwNotExistOrSetLastUsage.

Fix : Suppression de SQUASH_REST_API_JWT_SECRET du compose orchestrateur.

9 — git absent du test-runner

Le script bash généré par l'orchestrateur fait un git clone avant d'exécuter les tests. Sans git dans le container, le script crashait silencieusement.

Fix : git ajouté dans le Dockerfile du test-runner + rebuild de l'image.

10 — Référence script avec espaces

perfshop-tests / smoke-test.robot  ← espaces = path invalide

Fix : Correction en perfshop-tests/smoke-test.robot dans Squash TM.

11 — Import squash_tf incorrect

squash_tf.TFParamService n'existe pas comme module Robot Framework.

Fix : Correction en squash_tf.squashTfRobotframeworkRunnerParameter dans tous les scripts.


Découvertes techniques

Découverte Impact
SSH_CHANNEL_* env vars forcent targets=['agents'] dans le code sshee Root cause du namespace issue
agentchannel Java répond "not found" avant sshee Python Annule workflow immédiatement
SQUASH_REST_API_JWT_SECRET dans l'orchestrateur = variable non documentée Cause throwNotExistOrSetLastUsage
SCM obligatoire pour que tm-community-generator génère un workflow Workflow fail sans SCM
git requis dans le test-runner (clone SCM avant exécution) Crash silencieux sans git
resultpublisher endpoints = Community limitation (404) Non bloquant
Format référence script : repo/fichier.robot sans espaces Parsing strict
Module squash_tf RF : squashTfRobotframeworkRunnerParameter Import Robot Framework

Fichiers modifiés

Fichier Modification
docker-compose.yml Suppression SSH_CHANNEL_*, SQUASH_REST_API_JWT_SECRET, debug désactivé
squash-orchestrator/sshee.yaml targets: [default], missing_host_key_policy: auto-add, namespaces: default
squash-orchestrator/arranger.yaml pending_timeout_minutes: 5
squash-orchestrator/squashtf.yaml agentchannel désactivé
squash-orchestrator/trusted_key.pub Nouvelle clé publique RSA 4096
squash-seed/squash.tm.cfg.properties squash.rest-api.jwt.secret décommenté
test-runner/Dockerfile Ajout git
test-runner/scripts/smoke-test.robot Fix import squash_tf
test-runner/scripts/CT-002-prix-coherence.robot Fix import squash_tf

Résultats

Test Résultat
CT-001 Smoke test API ✅ PASS — 1 test, 1 passed, 0 failed
CT-002 Prix cohérence Selenium ✅ Lancé et exécuté

Pending session 23

  • [ ] Remontée des logs Robot Framework vers /rf-logs/ (Loki/Grafana)
  • [ ] Automatiser la config Squash TM via seed.py
  • [ ] Tester CT-002 complet avec résultat dans Squash TM

Notes infrastructure (formateur)

Procédure rebuild test-runner (Windows → NAS)

Le NAS Synology DSM 7 ne supporte pas seccomp — impossible de builder en natif. Le build se fait sur Windows puis est exporté en tar.

# Windows PowerShell — répertoire test-runner
cd C:\...\perfshop\test-runner
docker build --no-cache -t perfshop-test-runner:latest .
docker save perfshop-test-runner:latest -o perfshop-test-runner-latest.tar
# Copier le tar dans /volume4/docker-speed/perfshop/ sur le NAS
# NAS
docker load -i /volume4/docker-speed/perfshop/perfshop-test-runner-latest.tar
docker compose stop perfshop-test-runner
docker compose up -d perfshop-test-runner
docker exec perfshop-test-runner which git && echo "GIT OK"

Token JWT RSA (clé fixe du projet)

La paire RSA est générée une seule fois avec opentf-ctl et committée dans le repo : - Clé publique : squash-orchestrator/trusted_key.pub (montée dans l'orchestrateur) - Clé privée : squash-orchestrator/trusted_key.pem (NAS uniquement, non committée)

Token actuel (valide jusqu'au 12/05/2027) :

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwidXVpZCI6IjMzNWUwODVhLWY4MTUtNDEwMy1hYjhjLTRjNDk2YWRmMjJhNSIsInBlcm1pc3Npb25zIjoiUkVBRF9XUklURSIsImlhdCI6MTc3Mzc3MjQ5NywiZXhwIjoxODA1MTU1MjAwfQ.7KV98NkR_oDST7y7mfd5617q2nlTf1BHoHnDmuMxBz3Z4xgoyQdAFrl4D5a8wUhAM1jlfcce4bu9FAMk3mP59w

Pour régénérer le token depuis le NAS :

docker exec perfshop-orchestrator opentf-ctl generate-token \
  --private-key /squash-orchestrator/trusted_key.pem \
  --issuer "squash orchestrator" --subject "squash-tm"

Configuration GitLab SCM

Compte dédié perfshop-ci / Squash2026/* — rôle Developer sur perfshop-tests.

Cohérence des mots de passe après session 22

Tous les compose files utilisent ${SQUASH_ADMIN_PASSWORD:-perfshop} comme valeur par défaut (au lieu de admin hardcodé). Le squash-seed utilise également ces variables.

Variables supprimées définitivement

Variable Raison
SQUASH_REST_API_JWT_SECRET (orchestrateur) Non documentée, cause throwNotExistOrSetLastUsage
SSH_CHANNEL_HOST/USER/PASSWORD/TAGS/POOLS Forcent targets=['agents'], écrasent sshee.yaml
SSHCHANNEL_DEBUG_LEVEL: DEBUG Commenté — décommenter si besoin debug paramiko
PUBLIC_KEY (orchestrateur) Variable fantôme sans effet

Erreurs Claude

# Erreur Sévérité
1 Nombreuses fausses pistes sur le namespace routing MAJEUR
2 SQUASH_REST_API_JWT_SECRET ajouté alors que non documenté MAJEUR
3 Token personnel Squash TM (HS512) mis dans serveur autom MOYEN
4 Plusieurs cycles sur agentchannel avant désactivation MOYEN
5 SCM non identifié comme cause du fail pendant longtemps MAJEUR