fix: forcer l'invalidation du cache Docker dans Portainer

- Ajout d'un build arg CACHE_BUST avec timestamp pour invalider le cache
- Ajout d'une instruction RUN tôt dans le Dockerfile pour forcer l'invalidation
- Amélioration de la documentation avec guide détaillé pour forcer le rebuild
- Explication du problème de cache Docker et solutions multiples
- Instructions pour utiliser --no-cache dans Portainer
This commit is contained in:
syoul
2025-12-03 16:51:18 +01:00
parent 801af0df91
commit 1fcad7fd95
3 changed files with 42 additions and 8 deletions

View File

@@ -4,8 +4,14 @@ FROM node:20-alpine
# Build arguments pour invalider le cache si nécessaire # Build arguments pour invalider le cache si nécessaire
ARG BUILD_DATE=unknown ARG BUILD_DATE=unknown
ARG BUILD_VERSION=unknown ARG BUILD_VERSION=unknown
ARG CACHE_BUST=1
LABEL build.date="${BUILD_DATE}" \ LABEL build.date="${BUILD_DATE}" \
build.version="${BUILD_VERSION}" build.version="${BUILD_VERSION}" \
cache.bust="${CACHE_BUST}"
# Invalider le cache en utilisant CACHE_BUST dans une instruction RUN
# Cela force Docker à reconstruire à partir de cette ligne si CACHE_BUST change
RUN echo "Cache bust: ${CACHE_BUST}" && date
WORKDIR /app WORKDIR /app

View File

@@ -7,9 +7,11 @@ services:
context: . context: .
dockerfile: Dockerfile.business dockerfile: Dockerfile.business
pull: true # Force le pull de l'image de base pour éviter le cache pull: true # Force le pull de l'image de base pour éviter le cache
no_cache: false # Portainer peut utiliser --no-cache via l'interface
args: args:
BUILD_DATE: "${BUILD_DATE:-unknown}" BUILD_DATE: "${BUILD_DATE:-$(date +%s)}"
BUILD_VERSION: "${BUILD_VERSION:-dev}" BUILD_VERSION: "${BUILD_VERSION:-dev}"
CACHE_BUST: "${CACHE_BUST:-$(date +%s)}" # Timestamp pour invalider le cache
# Si vous utilisez une image pré-bâtie, décommentez image et commentez build # Si vous utilisez une image pré-bâtie, décommentez image et commentez build
# image: votre-registre/laplank-radar-business:latest # image: votre-registre/laplank-radar-business:latest
restart: unless-stopped restart: unless-stopped

View File

@@ -163,19 +163,45 @@ Si le dépôt est privé, utiliser un **Personal Access Token** (Gitea) :
Pour mettre à jour le Radar Technologique Laplank dans Portainer : Pour mettre à jour le Radar Technologique Laplank dans Portainer :
**Option 1 : Rebuild depuis Git (recommandé)** **⚠️ IMPORTANT : Pour que les mises à jour soient effectives, il faut forcer le rebuild sans cache !**
**Option 1 : Rebuild avec --no-cache (RECOMMANDÉ)**
1. Aller dans **Stacks** → Sélectionner la stack `laplank-radar-technologique`
2. Cliquer sur **Editor**
3. **Cocher la case "Always pull image"** (si disponible)
4. **Cocher la case "Rebuild"** ou utiliser l'option "Rebuild the stack"
5. **Dans les options avancées, cocher "No cache"** ou utiliser `--no-cache` dans les build args
6. Cliquer sur **Update the stack**
7. Portainer va reconstruire l'image complètement sans utiliser le cache
**Option 2 : Rebuild manuel via l'interface**
1. Aller dans **Stacks** → Sélectionner la stack `laplank-radar-technologique` 1. Aller dans **Stacks** → Sélectionner la stack `laplank-radar-technologique`
2. Cliquer sur **Editor** 2. Cliquer sur **Editor**
3. Cliquer sur **Update the stack** 3. Cliquer sur **Update the stack**
4. Portainer va reconstruire l'image depuis la dernière version de la branche `dev-tech` 4. **Avant de confirmer**, dans les options de build, ajouter `--no-cache` ou cocher "No cache"
5. Confirmer la mise à jour
**Option 2 : Pull & Redeploy** **Option 3 : Supprimer l'image et rebuild (si les options ci-dessus ne fonctionnent pas)**
1. Aller dans **Containers** → Sélectionner `laplank-radar-business` 1. Aller dans **Containers** → Sélectionner `laplank-radar-technolologique`
2. Cliquer sur **Recreate** (si l'image a été rebuild ailleurs) 2. Cliquer sur **Stop** pour arrêter le conteneur
3. Aller dans **Images** → Trouver l'image de la stack
4. Cliquer sur **Remove** pour supprimer l'image
5. Retourner dans **Stacks** → Sélectionner la stack
6. Cliquer sur **Editor****Update the stack**
7. L'image sera reconstruite depuis zéro
**Option 4 : Utiliser le CACHE_BUST automatique**
Le `docker-compose.business.yml` inclut maintenant un `CACHE_BUST` avec timestamp qui change automatiquement. Cependant, Portainer peut ne pas interpréter les variables shell `$(date +%s)`. Dans ce cas :
1. Utiliser l'**Option 1** avec `--no-cache`
2. Ou modifier manuellement le `CACHE_BUST` dans le compose avant de mettre à jour
**Vérification après mise à jour :** **Vérification après mise à jour :**
- Vérifier les logs : **Containers**`laplank-radar-business`**Logs** - Vérifier les logs : **Containers**`laplank-radar-technolologique`**Logs**
- Tester l'application : `http://<votre-serveur>:3006` - Tester l'application : `http://<votre-serveur>:3006`
- Vérifier que les changements sont visibles (par exemple, le contenu de `about.md` ou `custom.css`)
**Pourquoi le cache pose problème ?**
Docker utilise un système de cache par couches. Si les fichiers copiés n'ont pas changé selon l'algorithme de détection de Docker, il réutilise les couches en cache. C'est pourquoi il faut forcer un rebuild complet avec `--no-cache` pour garantir que tous les fichiers sont bien copiés et que l'application est reconstruite avec les dernières modifications.
## Déploiement avec Drone CI ## Déploiement avec Drone CI