L'objectif de cette section est de mettre en place un pipeline CI/CD permettant d'automatiser l'intégration, les tests, la construction de l'image Docker et le déploiement sur Kubernetes.
Le pipeline est déclenché automatiquement lors de :
main ou master).Avant de construire l'image, il est essentiel de vérifier la qualité du code.
name: CI Pipeline on: push: branches: - main pull_request: jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Run linting run: npm run lint - name: Run unit tests run: npm test
Si les tests passent, on construit et publie l’image Docker dans un registre Docker.
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install --production COPY . . EXPOSE 3000 CMD ["node", "server.js"]
build: runs-on: ubuntu-latest needs: test steps: - name: Checkout code uses: actions/checkout@v2 - name: Log in to Docker Hub run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - name: Build Docker image run: | docker build -t myrepo/myapp:${{ github.sha }} . docker tag myrepo/myapp:${{ github.sha }} myrepo/myapp:latest - name: Push Docker image run: | docker push myrepo/myapp:${{ github.sha }} docker push myrepo/myapp:latest
Après la construction de l’image, elle est déployée sur un cluster Kubernetes.
deployment.yamlapiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myrepo/myapp:latest ports: - containerPort: 3000
deploy: runs-on: ubuntu-latest needs: build steps: - name: Configure kubectl run: | echo "${{ secrets.KUBE_CONFIG }}" > kubeconfig.yaml export KUBECONFIG=kubeconfig.yaml - name: Deploy to Kubernetes run: | kubectl apply -f deployment.yaml kubectl set image deployment/myapp-deployment myapp=myrepo/myapp:${{ github.sha }}
Une fois le déploiement terminé, nous utilisons Prometheus et Grafana pour surveiller les performances.
kubectl get pods kubectl get services
kubectl logs -f myapp-pod
Si une nouvelle version introduit des bugs, il est possible de revenir à une version précédente.
kubectl rollout history deployment myapp-deployment
kubectl rollout undo deployment myapp-deployment
Grâce à ce pipeline CI/CD, chaque modification du code est automatiquement testée, construite, publiée et déployée en production sans intervention manuelle. Cela assure un déploiement rapide, fiable et sécurisé.