0

0

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

WBOY

WBOY

发布时间:2024-08-09 11:40:28

|

917人浏览过

|

来源于dev.to

转载

云简历挑战 - 第 2 部分

介绍

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

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

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

为什么 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 管道中包括单元测试、集成测试和端到端测试。

    寻鲸AI
    寻鲸AI

    寻鲸AI是一款功能强大的人工智能写作工具,支持对话提问、内置多场景写作模板如写作辅助类、营销推广类等,更能一键写作各类策划方案。

    下载
  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 不是一次性设置。随着项目的发展,继续完善您的管道、添加更多测试并优化您的工作流程。祝您编码和部署愉快!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

559

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

437

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

776

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

479

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

554

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1091

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

659

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

1

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 23.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号