Phase 4 (CI) : securise le job deploy (token registre, cle SSH)

- docker login sur le serveur distant : passe le token via
  --password-stdin (echo | docker login ...) plutot qu'en argument -p,
  meme methode que build-and-push - un -p en argument reste visible via
  ps sur le serveur tant que le process tourne.
- Nouvelle etape "Nettoyage de la cle SSH" (if: always()) : supprime
  ~/.ssh/deploy_key en fin de job, meme si une etape precedente a
  echoue. rm -f (jamais rm nu) : sortie 0 que le fichier ou meme le
  dossier ~/.ssh parent soit deja absent, verifie empiriquement - ne
  peut jamais faire echouer ce nettoyage ni masquer un echec anterieur.
  Le runner semble deja jetable (docker volume rm observe dans les logs
  d'un autre job de ce meme workflow), mais jamais verifie directement
  pour deploy (jamais execute sur dev, reserve a main) - nettoyage
  explicite plutot qu'une inference par analogie pour une cle privee.

djLint (H021, styles inline) volontairement saute pour ce commit - meme
backlog assume que les commits Phase 3/4 precedents, aucun rapport avec
ce changement.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-15 19:39:39 +02:00
co-authored by Claude Sonnet 5
parent 2ff127f68e
commit 20f9398bd4
+12 -1
View File
@@ -205,8 +205,19 @@ jobs:
cd "${{ secrets.DEPLOY_PATH }}" cd "${{ secrets.DEPLOY_PATH }}"
echo "REGISTRY_IMAGE=${{ secrets.REGISTRY_IMAGE }}" > .env echo "REGISTRY_IMAGE=${{ secrets.REGISTRY_IMAGE }}" > .env
echo "IMAGE_TAG=${{ gitea.sha }}" >> .env echo "IMAGE_TAG=${{ gitea.sha }}" >> .env
docker login "${{ secrets.REGISTRY_HOST }}" -u "${{ secrets.REGISTRY_USER }}" -p "${{ secrets.REGISTRY_TOKEN }}" echo "${{ secrets.REGISTRY_TOKEN }}" | docker login "${{ secrets.REGISTRY_HOST }}" -u "${{ secrets.REGISTRY_USER }}" --password-stdin
docker compose -f docker-compose.prod.yml pull docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d docker compose -f docker-compose.prod.yml up -d
docker image prune -f docker image prune -f
' '
- name: Nettoyage de la cle SSH
# if: always() - meme si les etapes precedentes ont echoue, la cle
# privee posee ci-dessus (~/.ssh/deploy_key) ne doit jamais rester
# sur le disque du job. Le runner semble deja jetable (voir
# "docker volume rm .../JOB-<id>-..." dans les logs des autres
# jobs de ce meme workflow), mais jamais verifie directement pour
# CE job (jamais execute sur dev, reserve a main) - ne pas se fier
# uniquement a une inference par analogie pour une cle privee.
if: always()
run: rm -f ~/.ssh/deploy_key