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
|
||||
/out-tsc
|
||||
/bazel-out
|
||||
.github
|
||||
|
||||
# Node
|
||||
/node_modules
|
||||
|
||||
Reference in New Issue
Block a user