首页  >  文章  >  web前端  >  自动化云恢复挑战:使用 GitHub Actions 实施 CI/CD

自动化云恢复挑战:使用 GitHub Actions 实施 CI/CD

WBOY
WBOY原创
2024-08-09 09:19:52589浏览

云简历挑战 - 第 2 部分

介绍

在本系列的第一部分中,我们逐步介绍了如何使用各种 AWS 服务构建云原生简历网站。现在,我们将通过使用 GitHub Actions 实施持续集成和持续部署 (CI/CD),将我们的项目提升到一个新的水平。这种自动化对于有效维护和更新我们的云简历至关重要。

CI/CD 是一种现代软件开发实践,强调应用程序开发阶段的自动化。在我们的云简历挑战赛中,这意味着我们可以更新简历或更改后端代码,将这些更改推送到 GitHub,并将它们自动部署到我们的 AWS 基础设施中。

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

为什么 CI/CD 在云开发中很重要

在我们深入实施之前,让我们讨论一下为什么 CI/CD 如此重要:

  1. 一致性:自动化部署可确保每个更改在您的基础架构中一致应用。
  2. 效率:手动部署非常耗时且容易出现人为错误。自动化可以节省时间并减少错误。
  3. 快速迭代:通过 CI/CD,可以快速安全地部署新功能和错误修复。
  4. 最佳实践:实施 CI/CD 鼓励良好的开发实践,例如频繁提交、全面测试和代码审查。
  5. 可扩展性:随着项目的增长,CI/CD 管道可以轻松扩展以适应更复杂的部署流程。

设置 GitHub 存储库

对于这个项目,我们将使用两个单独的存储库:

  1. 前端存储库:包含静态网站的 HTML、CSS 和 JavaScript 文件。
  2. 后端存储库:包含 Lambda 函数、API 网关和 DynamoDB 表的 AWS CDK 代码。

这种分离使我们能够独立管理和版本控制我们的前端和后端代码。

为前端实施 CI/CD

让我们首先为我们的前端设置 GitHub Actions 工作流程。在前端存储库中的 .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 "/*"

此工作流程执行以下操作:

  1. 推送到主分支时触发
  2. 设置 AWS 凭证(我们将在 GitHub 机密中配置)
  3. 将存储库内容同步到 S3 存储桶
  4. 使 CloudFront 缓存失效以确保提供最新版本

后端实施 CI/CD

对于后端,我们将创建一个类似的工作流程。在后端存储库中创建一个新文件(位于 .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

此工作流程:

  1. 推送到主分支时触发
  2. 设置 Node.js
  3. 安装依赖项
  4. 运行测试(您应该实施)
  5. 设置 AWS 凭证
  6. 部署 CDK 堆栈

管理秘密

为了确保我们的敏感信息安全,我们将使用 GitHub Secrets。转到您的存储库设置,单击“秘密和变量”,然后单击“操作”,然后添加以下秘密:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • S3_BUCKET
  • CLOUDFRONT_DISTRIBUTION_ID

这些秘密经过安全加密,仅在执行期间暴露给 GitHub Actions 工作流程。

云原生应用中 CI/CD 的最佳实践

  1. 保证秘密安全:切勿对敏感信息进行硬编码。始终使用环境变量或秘密管理服务。

  2. 实施稳健的测试:在 CI 管道中包括单元测试、集成测试和端到端测试。

  3. 使用基础设施即代码:使用 AWS CDK 或 CloudFormation 等工具定义您的基础设施。这可确保一致性并允许对基础架构进行版本控制。

  4. 监控您的管道:设置失败部署的通知并定期查看您的 CI/CD 日志。

  5. 实施逐步部署:考虑使用蓝绿部署或金丝雀发布等技术来实现更安全的部署。

挑战和经验教训

实施 CI/CD 并非没有挑战。以下是一些经验教训:

  1. IAM 权限:确保您的 AWS IAM 用户拥有正确的部署权限。可能需要一些尝试和错误才能做到这一点。

  2. 依赖管理:使您的依赖项在 CI 环境中保持最新。考虑使用 Dependabot 等工具来自动化此过程。

  3. 测试至关重要:投入时间编写全面的测试。它们将使您免于将错误部署到生产中。

  4. 成本管理:了解与 CI/CD 管道相关的成本,尤其是在您经常运行大量测试或部署时。

结论

使用 GitHub Actions 实施 CI/CD 显着简化了我们的云简历挑战赛的开发流程。它让我们能够专注于编写代码和进行改进,因为知道部署只需 git 推送即可。

这种经验强调了云开发中自动化的重要性,并提供了行业标准 CI/CD 实践的实践经验。无论您是在处理个人项目还是大型应用程序,投入时间建立强大的 CI/CD 管道都会在生产力和可靠性方面带来回报。

请记住,CI/CD 不是一次性设置。随着项目的发展,继续完善您的管道、添加更多测试并优化您的工作流程。祝您编码和部署愉快!

以上是自动化云恢复挑战:使用 GitHub Actions 实施 CI/CD的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn