Maison  >  Article  >  interface Web  >  Automatisation du défi de reprise dans le cloud : mise en œuvre de CI/CD avec les actions GitHub

Automatisation du défi de reprise dans le cloud : mise en œuvre de CI/CD avec les actions GitHub

WBOY
WBOYoriginal
2024-08-09 09:19:52589parcourir

Défi de reprise dans le cloud - Partie 2

Introduction

Dans la première partie de cette série, nous avons expliqué la création d'un site Web de CV natif cloud à l'aide de divers services AWS. Nous allons maintenant passer notre projet au niveau supérieur en implémentant l'intégration continue et le déploiement continu (CI/CD) à l'aide des actions GitHub. Cette automatisation est cruciale pour maintenir et mettre à jour efficacement notre CV cloud.

CI/CD est une pratique de développement logiciel moderne qui met l'accent sur l'automatisation des étapes de développement d'applications. Dans le contexte de notre Cloud Resume Challenge, cela signifie que nous pouvons mettre à jour notre CV ou apporter des modifications à notre code backend, transférer ces modifications vers GitHub et les déployer automatiquement sur notre infrastructure AWS.

Automating the Cloud Resume Challenge: Implementing CI/CD with GitHub Actions

Pourquoi CI/CD est important dans le développement cloud

Avant de plonger dans la mise en œuvre, expliquons pourquoi CI/CD est si important :

  1. Cohérence : les déploiements automatisés garantissent que chaque modification est appliquée de manière cohérente dans votre infrastructure.
  2. Efficacité : les déploiements manuels prennent du temps et sont sujets aux erreurs humaines. L'automatisation fait gagner du temps et réduit les erreurs.
  3. Itération rapide : avec CI/CD, de nouvelles fonctionnalités et corrections de bugs peuvent être déployées rapidement et en toute sécurité.
  4. Meilleures pratiques : la mise en œuvre de CI/CD encourage les bonnes pratiques de développement telles que des validations fréquentes, des tests complets et des révisions de code.
  5. Évolutivité : à mesure que votre projet se développe, les pipelines CI/CD peuvent facilement évoluer pour s'adapter à des processus de déploiement plus complexes.

Configuration des référentiels GitHub

Pour ce projet, nous utiliserons deux référentiels distincts :

  1. Référentiel Frontend : contient les fichiers HTML, CSS et JavaScript du site Web statique.
  2. Backend Repository : héberge le code AWS CDK pour la fonction Lambda, API Gateway et la table DynamoDB.

Cette séparation nous permet de gérer et de contrôler les versions de notre code frontend et backend de manière indépendante.

Implémentation de CI/CD pour le frontend

Commençons par configurer un workflow GitHub Actions pour notre frontend. Créez un nouveau fichier dans votre référentiel frontend à l'adresse .github/workflows/deploy-frontend.yml :

name: Deploy Frontend

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1

    - name: Deploy to S3
      run: aws s3 sync . s3://${{ secrets.S3_BUCKET }} --delete

    - name: Invalidate CloudFront
      run: |
        aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} --paths "/*"

Ce flux de travail effectue les opérations suivantes :

  1. Déclencheurs sur les push vers la branche principale
  2. Configure les informations d'identification AWS (que nous configurerons dans les secrets GitHub)
  3. Synchronise le contenu du référentiel avec le compartiment S3
  4. Invalide le cache CloudFront pour garantir que la dernière version est servie

Implémentation de CI/CD pour le backend

Pour le backend, nous allons créer un workflow similaire. Créez un nouveau fichier dans votre référentiel backend à l'adresse .github/workflows/deploy-backend.yml :

name: Deploy Backend

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '16'

    - name: Install dependencies
      run: npm ci

    - name: Run tests
      run: npm test

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1

    - name: Deploy to AWS
      run: npx cdk deploy --require-approval never

Ce flux de travail :

  1. Déclencheurs sur les push vers la branche principale
  2. Configure Node.js
  3. Installe les dépendances
  4. Exécute des tests (que vous devez implémenter)
  5. Configure les informations d'identification AWS
  6. Déploie la pile CDK

Gestion des secrets

Pour protéger nos informations sensibles, nous utiliserons GitHub Secrets. Allez dans les paramètres de votre dépôt, cliquez sur "Secrets et variables", puis "Actions", et ajoutez les secrets suivants :

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • S3_BUCKET
  • CLOUDFRONT_DISTRIBUTION_ID

Ces secrets sont cryptés de manière sécurisée et exposés au workflow GitHub Actions uniquement pendant l'exécution.

Meilleures pratiques pour CI/CD dans les applications cloud natives

  1. Gardez les secrets en sécurité : ne codez jamais en dur les informations sensibles. Utilisez toujours des variables d'environnement ou un service de gestion des secrets.

  2. Mettez en œuvre des tests robustes : incluez des tests unitaires, des tests d'intégration et des tests de bout en bout dans votre pipeline CI.

  3. Utiliser l'infrastructure en tant que code : définissez votre infrastructure à l'aide d'outils comme AWS CDK ou CloudFormation. Cela garantit la cohérence et permet le contrôle des versions de votre infrastructure.

  4. Surveillez vos pipelines : configurez des notifications pour les déploiements ayant échoué et consultez régulièrement vos journaux CI/CD.

  5. Mettez en œuvre des déploiements progressifs : envisagez d'utiliser des techniques telles que les déploiements bleu-vert ou les versions Canary pour des déploiements plus sûrs.

Défis et leçons apprises

La mise en œuvre de CI/CD n'a pas été sans défis. Voici quelques leçons apprises :

  1. Autorisations IAM : assurez-vous que votre utilisateur AWS IAM dispose des autorisations appropriées pour le déploiement. Cela peut prendre quelques essais et erreurs pour y parvenir.

  2. Gestion des dépendances : Gardez vos dépendances à jour dans l'environnement CI. Pensez à utiliser des outils comme Dependabot pour automatiser ce processus.

  3. Les tests sont cruciaux : investissez du temps dans la rédaction de tests complets. Ils vous éviteront de déployer des bugs en production.

  4. Gestion des coûts : soyez conscient des coûts associés à votre pipeline CI/CD, surtout si vous effectuez fréquemment des tests ou des déploiements approfondis.

Conclusion

La mise en œuvre de CI/CD avec GitHub Actions a considérablement rationalisé notre processus de développement pour le Cloud Resume Challenge. Cela nous permet de nous concentrer sur l'écriture de code et d'apporter des améliorations, sachant que le déploiement n'est qu'un simple effort.

Cette expérience renforce l'importance de l'automatisation dans le développement cloud et offre une expérience pratique des pratiques CI/CD standard de l'industrie. Que vous travailliez sur un projet personnel ou sur une application à grande échelle, investir du temps dans la mise en place d'un pipeline CI/CD robuste rapporte des dividendes en termes de productivité et de fiabilité.

N'oubliez pas que CI/CD n'est pas une configuration unique. Continuez à affiner vos pipelines, ajoutez plus de tests et optimisez vos flux de travail à mesure que votre projet évolue. Bon codage et déploiement !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn