Files
ENI-JSAdvanced_15/.github/workflows/ci-cd.yml
2025-12-19 10:06:05 +01:00

106 lines
3.7 KiB
YAML

name: CI/CD pipeline Angular (AWS S3 + CloudFront)
on:
push:
branches:
- master
# Variables d'environnement pour le déploiement
env:
AWS_REGION: us-east-1 # Mettez votre région
S3_BUCKET_NAME: "hello-world-angular-s3-bucket" # Nom du bucket S3 (!= de celui Beanstalk) pour stockage des fichiers
CLOUDFRONT_DISTRIBUTION_ID: "VOTRE-ID-CLOUDFRONT" # ID cloudfront à invalider après déploiement
jobs:
test:
name: CI - Tests, Build et Scans
runs-on: ubuntu-24.04
steps:
# 1. Récupération du code
- name: 1. Récupérer le code
uses: actions/checkout@v5.0.0
# 2. Installation de Node.js
- name: 2. Mettre en place Node.js (v20)
uses: actions/setup-node@v4.0.3
with:
node-version: 20
cache: 'npm' # Mettre en cache les dépendances npm
# 3. Installation des dépendances
- name: 3. Installer les dépendances (npm ci)
run: npm ci
# 4. Lancement des tests unitaires
- name: 4. Lancer les tests unitaires (Karma/Jasmine)
run: npm run test -- --watch=false --browsers=ChromeHeadless
# 5. DevSecOps - Vérifie la qualité et le style du code
- name: 5. Linter (ESLint)
run: npm run lint
# 6. Build de l'application
- name: 6. Builder l'application (ng build)
run: npm run build -- --configuration=production
# 7. DevSecOps - Scanne les dépendances pour les vulnérabilités connues
- name: 7. SCA - Scan des dépendances (Trivy)
uses: aquasecurity/trivy-action@0.33.1
with:
scan-type: 'fs'
scan-ref: '.'
ignore-unfixed: true
format: 'table'
scanners: 'vuln,secret'
severity: 'HIGH,CRITICAL'
# 8. DevSecOps - Scanne l'historique Git
- name: 8. Scan des secrets de l'historique Git (Gitleaks)
uses: gitleaks/gitleaks-action@v2.3.9
# 9. Stocker l'artefact de build (le dossier 'dist')
- name: 9. Archiver l'artefact de build
uses: actions/upload-artifact@v4
with:
name: angular-build-dist
# Assurez-vous que le chemin correspond bien à votre projet
path: dist/hello-world-angular/
deploy-aws-cloudfront:
name: CD - Déploiement sur S3 + CloudFront
runs-on: ubuntu-24.04
needs: test # Ne se lance que si le job 'test' a réussi
if: github.ref == 'refs/heads/master'
steps:
# 1. Récupérer l'artefact de build
- name: 1. Télécharger l'artefact de build
uses: actions/download-artifact@v4
with:
name: angular-build-dist
path: dist/hello-world-angular
# 2. Authentification auprès d'AWS
- name: 2. Configurer les identifiants AWS
uses: aws-actions/configure-aws-credentials@v5.1.0
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
# 3. Envoi des fichiers sur S3
- name: 3. Synchroniser les fichiers avec S3
# --delete supprime les anciens fichiers qui ne sont plus dans le build
run: |
echo "Synchronisation du build vers s3://${{ env.S3_BUCKET_NAME }}"
aws s3 sync ./dist/hello-world-angular s3://${{ env.S3_BUCKET_NAME }} --delete
# 4. Invalidation du cache CloudFront
- name: 4. Invalider le cache CloudFront
# C'est l'étape cruciale pour que les utilisateurs voient la nouvelle version
run: |
echo "Invalidation du cache pour la distribution ${{ env.CLOUDFRONT_DISTRIBUTION_ID }}"
aws cloudfront create-invalidation \
--distribution-id ${{ env.CLOUDFRONT_DISTRIBUTION_ID }} \
--paths "/*" # Invalide tout le site