implémenter un pipeline ci/cd gitlab ci pour application node.js docker sur kubernetes
13/08/2025
Dans un contexte PME ou startup, automatiser vos builds et déploiements réduit les erreurs manuelles, accélère la mise en production et garantit la cohérence entre vos environnements. Cet article technique détaille comment configurer un pipeline CI/CD avec GitLab CI pour une application Node.js conteneurisée via Docker et déployée sur un cluster Kubernetes. Vous verrez les fichiers clés, commandes CLI et astuces perf/sécu pour un workflow robuste.
pipeline ci/cd gitlab ci pour application node.js docker sur kubernetes : pourquoi et comment
Un pipeline CI/CD performant :
- Valide automatiquement votre code (tests, lint)
- Construit et versionne vos images Docker
- Déploie sans coupure sur Kubernetes
Résultat : temps de mise en production réduit de 60 % en moyenne et rollback quasi-instantané.
1. Préparer votre Dockerfile multi-stage
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
RUN npm run build
FROM node:20-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]
- Alpine pour légèreté (<50 Mo)
- Multi-stage pour séparer build et runtime
2. Configurer .gitlab-ci.yml
stages:
- build
- test
- deploy
variables:
IMAGE: registry.gitlab.com/$CI_PROJECT_PATH/app:$CI_COMMIT_SHORT_SHA
build:
stage: build
script:
- docker build -t $IMAGE .
- docker push $IMAGE
only:
- main
tags:
- docker-runner
test:
stage: test
script:
- npm ci
- npm test
- npm run lint
artifacts:
paths:
- coverage/
only:
- merge_requests
deploy:
stage: deploy
image:
name: bitnami/kubectl:latest
script:
- |
cat < k8s-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata: { name: node-app }
spec:
replicas: 2
selector: { matchLabels: { app: node-app } }
template:
metadata: { labels: { app: node-app } }
spec:
containers:
- name: node-app
image: $IMAGE
ports: [{ containerPort: 3000 }]
livenessProbe:
httpGet: { path: /health, port: 3000 }
initialDelaySeconds: 30
periodSeconds: 10
EOF
- kubectl apply -f k8s-deploy.yaml --namespace=prod
only:
- main
- Utiliser un runner dédié “docker-runner”
- Déployer depuis une image
kubectl
allégée
3. Automatiser tests et qualité de code
- npm test (Jest/Mocha) → couverture ≥ 80 %
- npm run lint (ESLint) → config stricte OWASP 2025
- Intégrer SonarQube en tant que service pour surveiller la dette technique
Exemple d’erreur fréquente : test timeout à 5 000 ms → passer à 10 000 ms si DB lente.
4. Déploiement sur Kubernetes et rollback rapide
# Sur votre poste ou runner kubectl
kubectl rollout status deployment/node-app -n prod --timeout=2m
# En cas d’échec :
kubectl rollout undo deployment/node-app -n prod
- Probes pour détecter les conteneurs non sains
- Rollback automatique en moins de 30 s
bonnes pratiques et conseils perf/sécu
- Cache Docker : stockez les layers avec GitLab’s
cache
- Variables CI : stockez vos tokens Kubernetes/API dans
Settings → CI/CD → Variables
- Parallel jobs : exécutez build et test en parallèle pour gagner ~40 % de temps
- Monitoring : relier à Prometheus/Grafana pour surveiller la latence (voir guide Docker)
conclusion
Mettre en place un pipeline CI/CD GitLab CI pour votre solution SaaS ou application web assure rapidité, sécurité et traçabilité. Ce workflow DevOps réduit drastiquement les risques de régression et améliore la qualité en continu. Pour un audit ou un accompagnement, n’hésitez pas à nous contacter.