First commit
This commit is contained in:
105
.github/workflows/ci-cd.yml
vendored
Normal file
105
.github/workflows/ci-cd.yml
vendored
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
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
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,7 +5,6 @@
|
|||||||
/tmp
|
/tmp
|
||||||
/out-tsc
|
/out-tsc
|
||||||
/bazel-out
|
/bazel-out
|
||||||
.github
|
|
||||||
|
|
||||||
# Node
|
# Node
|
||||||
/node_modules
|
/node_modules
|
||||||
|
|||||||
Reference in New Issue
Block a user