Un pipeline CI/CD efficace est crucial pour accélérer les cycles de développement, améliorer la qualité logicielle et garantir une mise en production rapide et fiable. Ce guide expert détaille comment mettre en place un pipeline avancé avec GitLab, Docker et Kubernetes.
Prérequis
- GitLab avec accès au CI/CD
- Un cluster Kubernetes opérationnel
- Docker installé sur les runners GitLab
- Bonne compréhension de Docker et Kubernetes
Configuration du projet GitLab
Créer un fichier .gitlab-ci.yml
à la racine du projet :
stages:
- build
- test
- deploy
variables:
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
build:
stage: build
script:
- docker build -t $IMAGE_TAG .
- docker push $IMAGE_TAG
test:
stage: test
script:
- docker run --rm $IMAGE_TAG pytest
deploy:
stage: deploy
script:
- kubectl set image deployment/mon-app mon-app=$IMAGE_TAG --record
environment:
name: production
url: https://mon-app.example.com
Runners GitLab avec Docker
Installation et enregistrement d'un runner Docker :
sudo gitlab-runner register --url https://gitlab.com/ --registration-token VOTRE_TOKEN
Configurer Docker executor :
sudo nano /etc/gitlab-runner/config.toml
Déploiement automatique sur Kubernetes
Créer un manifest Kubernetes deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mon-app
spec:
replicas: 3
selector:
matchLabels:
app: mon-app
template:
metadata:
labels:
app: mon-app
spec:
containers:
- name: mon-app
image: VOTRE_IMAGE:latest
ports:
- containerPort: 80
Appliquer dans le cluster :
kubectl apply -f deployment.yaml
Surveillance et alertes
- GitLab fournit nativement une surveillance des pipelines (logs, métriques)
- Intégrer Prometheus et Grafana sur Kubernetes pour le monitoring applicatif
Bonnes pratiques CI/CD avancées
- Déploiement progressif (canary, blue/green)
- Tests automatisés (unitaires, intégration, E2E)
- Sécurité : scanning des images Docker
Conclusion
Avec ce pipeline CI/CD avancé, vous pourrez livrer plus rapidement et plus souvent, tout en garantissant la qualité et la stabilité de vos applications dans un environnement Kubernetes robuste.