Fix deploy.sh to avoid dependency upgrades in production
**Motivations:** - Make deployments reproducible and prevent production-only dependency drift **Root causes:** - deploy.sh ran npm-check-updates -u on the server, then npm install hit ERESOLVE **Correctifs:** - Remove npm-check-updates step - Switch npm install to npm ci - Stop copying next.config.js over SSH (use Git version) **Evolutions:** - Add fixKnowledge note explaining the failure mode and remediation **Pages affectées:** - deploy.sh - fixKnowledge/2026-01-13-deploy-sh-ncu-eresolve.md
This commit is contained in:
parent
6e649df0af
commit
398e0dd1de
29
deploy.sh
29
deploy.sh
@ -143,40 +143,23 @@ echo ""
|
|||||||
echo "11. Dernier commit:"
|
echo "11. Dernier commit:"
|
||||||
ssh_exec "cd ${APP_DIR} && git log -1 --oneline"
|
ssh_exec "cd ${APP_DIR} && git log -1 --oneline"
|
||||||
|
|
||||||
# Copier next.config.js local vers le serveur (pour ignorer ESLint pendant le build)
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "12. Mise à jour de next.config.js pour ignorer ESLint pendant le build..."
|
echo "12. Installation des dépendances (reproductible via lockfile)..."
|
||||||
if [ -f "next.config.js" ]; then
|
ssh_exec "cd ${APP_DIR} && npm ci"
|
||||||
cat next.config.js | ssh_exec "cat > ${APP_DIR}/next.config.js"
|
|
||||||
echo " ✓ next.config.js mis à jour"
|
|
||||||
else
|
|
||||||
echo " ⚠ next.config.js local non trouvé, utilisation de celui du serveur"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Mettre à jour les dépendances aux dernières versions
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "13. Mise à jour des dépendances aux dernières versions..."
|
echo "13. Construction de l'application..."
|
||||||
ssh_exec "cd ${APP_DIR} && npx -y npm-check-updates -u || true"
|
|
||||||
|
|
||||||
# Installer les dépendances
|
|
||||||
echo ""
|
|
||||||
echo "14. Installation des dépendances..."
|
|
||||||
ssh_exec "cd ${APP_DIR} && npm install"
|
|
||||||
|
|
||||||
# Construire l'application
|
|
||||||
echo ""
|
|
||||||
echo "15. Construction de l'application..."
|
|
||||||
ssh_exec "cd ${APP_DIR} && npm run build"
|
ssh_exec "cd ${APP_DIR} && npm run build"
|
||||||
|
|
||||||
# Redémarrer le service
|
# Redémarrer le service
|
||||||
echo ""
|
echo ""
|
||||||
echo "16. Redémarrage du service ${APP_NAME}..."
|
echo "14. Redémarrage du service ${APP_NAME}..."
|
||||||
ssh_exec "sudo systemctl restart ${APP_NAME}"
|
ssh_exec "sudo systemctl restart ${APP_NAME}"
|
||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
# Vérifier que le service fonctionne
|
# Vérifier que le service fonctionne
|
||||||
echo ""
|
echo ""
|
||||||
echo "17. Vérification du service..."
|
echo "15. Vérification du service..."
|
||||||
if ssh_exec "sudo systemctl is-active ${APP_NAME} >/dev/null"; then
|
if ssh_exec "sudo systemctl is-active ${APP_NAME} >/dev/null"; then
|
||||||
echo " ✓ Service actif"
|
echo " ✓ Service actif"
|
||||||
echo ""
|
echo ""
|
||||||
@ -190,7 +173,7 @@ fi
|
|||||||
|
|
||||||
# Vérifier que le port est en écoute
|
# Vérifier que le port est en écoute
|
||||||
echo ""
|
echo ""
|
||||||
echo "18. Vérification du port 3001..."
|
echo "16. Vérification du port 3001..."
|
||||||
if ssh_exec "sudo ss -tuln | grep -q ':3001 '"; then
|
if ssh_exec "sudo ss -tuln | grep -q ':3001 '"; then
|
||||||
echo " ✓ Port 3001 en écoute"
|
echo " ✓ Port 3001 en écoute"
|
||||||
else
|
else
|
||||||
|
|||||||
35
fixKnowledge/2026-01-13-deploy-sh-ncu-eresolve.md
Normal file
35
fixKnowledge/2026-01-13-deploy-sh-ncu-eresolve.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
## Contexte
|
||||||
|
|
||||||
|
Le script `deploy.sh` exécute un déploiement sur le serveur (pull Git, installation, build, restart).
|
||||||
|
Lors d’un déploiement, `npm install` échoue avec `ERESOLVE` après une mise à jour automatique des dépendances.
|
||||||
|
|
||||||
|
## Impact
|
||||||
|
|
||||||
|
- Déploiement interrompu avant `npm run build`
|
||||||
|
- Service non redémarré, donc absence de mise en production effective
|
||||||
|
- Risque de dérive des versions en production (package.json modifié côté serveur, hors Git)
|
||||||
|
|
||||||
|
## Root cause
|
||||||
|
|
||||||
|
`deploy.sh` exécutait sur le serveur :
|
||||||
|
- `npx npm-check-updates -u` : modification de `package.json` **en production** (hors contrôle Git)
|
||||||
|
- puis `npm install` : résolution de dépendances conflictuelles (`ERESOLVE`) car le lockfile n’est pas géré comme source de vérité et l’état du workspace serveur peut être incohérent.
|
||||||
|
|
||||||
|
## Correctifs
|
||||||
|
|
||||||
|
- Suppression de l’upgrade automatique des dépendances (`npm-check-updates`) pendant le déploiement.
|
||||||
|
- Remplacement de `npm install` par `npm ci` pour utiliser strictement le lockfile et garantir un déploiement reproductible.
|
||||||
|
- Suppression de l’étape qui copiait `next.config.js` via SSH (le fichier doit venir de Git via `git pull`).
|
||||||
|
|
||||||
|
## Pages affectées
|
||||||
|
|
||||||
|
- `deploy.sh`
|
||||||
|
|
||||||
|
## Modalités d’analyse
|
||||||
|
|
||||||
|
- Sur un déploiement en échec : rechercher `ERESOLVE could not resolve` dans la sortie `npm install`.
|
||||||
|
- Vérifier si `deploy.sh` modifie des fichiers côté serveur après `git pull` (anti-pattern car divergence hors Git).
|
||||||
|
|
||||||
|
## Modalités de déploiement
|
||||||
|
|
||||||
|
- Rejouer `./deploy.sh "<message>"` après commit/push des modifications du script.
|
||||||
Loading…
x
Reference in New Issue
Block a user