pipeline ci/cd pour saas node.js avec github actions et aws ecs
25/07/2025
pipeline ci/cd pour saas node.js avec github actions et aws ecs
Mettre en place un pipeline CI/CD robuste permet d’accélérer vos livraisons, d’améliorer la qualité de votre code et de réduire les risques liés aux déploiements. Dans ce tutoriel, vous découvrirez comment automatiser le build, les tests et le déploiement d’une application Node.js conteneurisée avec Docker, GitHub Actions et AWS ECS.
1. prérequis
- Compte AWS avec IAM user et permissions ECS/ECR
- CLI AWS configurée (
aws configure
) - Repository GitHub avec code Node.js
- Docker Desktop ou moteur Docker sur votre poste
2. créer un Dockerfile optimisé
# Dockerfile
FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
– on utilise l’image node:18-alpine
pour un conteneur léger.
– séparer build et runtime réduit la taille finale.
3. définir le workflow GitHub Actions
Dans .github/workflows/ci-cd.yml
:
name: CI CD Pipeline
on:
push:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with: node-version: '18'
- run: npm ci
- run: npm test
build-and-push:
needs: build-and-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Login to ECR
run: |
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} \
| docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com
- name: Build & Push Docker Image
run: |
docker build -t my-saas-app:${{ github.sha }} .
docker tag my-saas-app:${{ github.sha }} ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/my-saas-app:${{ github.sha }}
docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/my-saas-app:${{ github.sha }}
- name: Deploy to ECS
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
aws-region: ${{ secrets.AWS_REGION }}
service: my-saas-service
cluster: my-saas-cluster
task-definition: my-task-def.json
4. déployer sur AWS ECS
4.1 créer le cluster et le repository ECR
# créer un repository ECR
aws ecr create-repository \
--repository-name my-saas-app \
--region eu-west-1
# créer un cluster ECS
aws ecs create-cluster \
--cluster-name my-saas-cluster
4.2 rédiger la task definition
{
"family": "my-saas-task",
"networkMode": "awsvpc",
"containerDefinitions": [{
"name": "api",
"image": ".dkr.ecr.eu-west-1.amazonaws.com/my-saas-app:latest",
"cpu": 256,
"memory": 512,
"portMappings": [{ "containerPort": 3000 }]
}]
}
5. bonnes pratiques CI/CD
- Stocker les secrets GitHub dans GitHub Secrets (AWS keys, region, account)
- Scanner les vulnérabilités :
npm audit
ou SonarQube - Mettre en place le rollback en cas d’échec de health-check
- Versionner vos images avec des tags sémantiques (semver)
- Surveiller les métriques ECS et CloudWatch pour anticiper la charge
6. conclusion
En quelques étapes, vous avez automatisé le build, les tests et le déploiement de votre SaaS Node.js sur AWS ECS grâce à GitHub Actions. Cette organisation réduit les erreurs humaines, accélère les itérations et renforce la fiabilité de vos livraisons. Prêt à sophistiquer votre pipeline CI/CD ou à intégrer des tests de sécurité avancés ? Contactez-nous pour une séance de consulting offerte.