当前位置: 首页 > news >正文

从本地到生产:迁移到 GitHub Actions 自动化 CI/CD,总结了这 5 个坑

一、为什么迁移到 GitHub Actions?

  • 无需额外服务器:GitHub 原生集成,免费额度充足(2000 分钟/月)
  • 矩阵构建:一次 push 测试多个 Node 版本、多个操作系统
  • 生态丰富:官方 marketplace 有上万 actions
  • 配置即代码.github/workflows/*.yml随仓库版本管理

迁移前:Jenkins + 自建服务器,维护成本高,构建不稳定。
迁移后:所有流程自动化,PR 自动跑测试,主干自动部署。

二、5 个踩过的坑与解决方案

坑 1:权限不足导致 actions 无法触发

现象pull_request事件中,从 fork 仓库提交的 PR 无法访问 secrets。
原因:GitHub 出于安全考虑,fork PR 默认不传递 secrets。
解决:使用pull_request_target事件(注意安全风险,需谨慎)。

on:pull_request_target:branches:[main]

坑 2:缓存失效,每次依赖安装 3 分钟

错误做法:每次跑npm ci都不缓存。
正确做法:使用actions/cache缓存node_modules

-name:Cache node_modulesuses:actions/cache@v4with:path:~/.npmkey:${{runner.os}}-node-${{hashFiles('package-lock.json')}}restore-keys:|${{ runner.os }}-node-

坑 3:矩阵策略导致重复构建

需求:需要在 Node 18、20、22 上分别测试,但每次 push 都跑 3 次,浪费时间。
解决:使用矩阵,但限定只在push到 main 或schedule时跑多版本,PR 只跑最新版。

strategy:matrix:node-version:[18.x,20.x,22.x]# 只在 main 分支跑全部exclude:-node-version:18.xif:github.ref!='refs/heads/main'

坑 4:环境变量在 composite action 中不生效

现象:自定义 action 里读取不到env上下文。
解决:通过with参数显式传递,或使用${{ env.MY_VAR }}语法。

坑 5:workflow 复用导致调试困难

问题:多个项目共用同一个 workflow,出错时难以定位。
解决:使用可复用 workflow (workflow_call),并增加workflow_dispatch手动触发调试。

on:workflow_call:inputs:environment:required:truetype:stringsecrets:DEPLOY_KEY:required:true

三、完整 workflow 模板(可直接复制)

示例:Node.js 项目 CI + 自动部署到 Vercel

name:CI/CDon:push:branches:[main,develop]pull_request:branches:[main]jobs:test:runs-on:ubuntu-lateststrategy:matrix:node-version:[18.x,20.x]steps:-uses:actions/checkout@v4-uses:actions/setup-node@v4with:node-version:${{matrix.node-version}}cache:'npm'-run:npm ci-run:npm testdeploy:needs:testif:github.ref == 'refs/heads/main'runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4-name:Deploy to Verceluses:amondnet/vercel-action@v20with:vercel-token:${{secrets.VERCEL_TOKEN}}vercel-org-id:${{secrets.VERCEL_ORG_ID}}vercel-project-id:${{secrets.VERCEL_PROJECT_ID}}vercel-args:'--prod'

四、常用 actions 清单

用途Action
缓存依赖actions/cache@v4
设置 Nodeactions/setup-node@v4
设置 Pythonactions/setup-python@v5
上传 artifactactions/upload-artifact@v4
下载 artifactactions/download-artifact@v4
发送 Slack 通知slackapi/slack-github-action@v1
部署到云服务器easingthemes/ssh-deploy@main

五、总结

  • GitHub Actions 完全取代 Jenkins 等传统 CI,配置即代码,免费额度足够中小项目。
  • 重点注意:缓存策略权限处理矩阵优化workflow 复用
  • 文中的所有 workflow 代码均可直接复制使用,根据项目调整即可。

建议收藏本文,下次新项目搭建 CI 时直接抄配置。下一篇写“GitHub Actions 安全最佳实践”。

http://www.jsqmd.com/news/1024487/

相关文章:

  • 如何借助微信投票制作平台制作投票活动?2026最新免费教程|防刷+批量导入+图文视频全支持 - 微信投票小程序
  • PingFangSC跨平台字体架构:现代Web应用的中文字体解决方案
  • 设计师与开发者的对话:Marketch如何让Sketch设计稿自动“开口说话“?
  • Docker,容器,容器化,DevOps,虚拟化
  • FigmaCN终极指南:3分钟免费搞定Figma中文汉化
  • 3大核心功能深度解析:Scan Tailor如何让扫描文档处理效率提升500%
  • AI标书软件技术原理解析:从招标文件解析到标书生成的全链路技术拆解 - 陈工0237
  • 杭州索川科技:专业电摩控制器与电机测试台解决方案
  • 福州奢侈品黄金回收商家实力榜单2026综合测评:综合实力榜首花落谁家 - 奢侈品回收评测
  • 亨得利官方辟谣避坑全指南:线上虚假广告实地核查 + 真伪辨别教程(推荐收藏备用) - 亨得利官方维修中心
  • 普通学生学AI,重点是把工具变成解决问题的能力
  • Python SSL与TLS安全连接实现细节
  • 2026年6月青岛奢侈品回收分级测评!7家正规平台评级,最优口碑出炉 - 薛定谔的梨花猫
  • LVI-SAM实战:从传感器标定到参数调优,跑通自定义数据全指南
  • 2026 智能外呼系统实测排行:综合能力出众,数企 AI 成企业降本优选 - 兔兔不是荼荼
  • 2026中小艺培校长亲测:培训机构管理系统避坑指南,搞定排课家校
  • 藏饰盘活不踩坑|2026哈尔滨首饰回收实测排行与行情解析 - 名奢变现站
  • 2026年营口鲅鱼圈区防身格斗培训真实测评与挑选标准 - 速递信息
  • 2026珠海甲醛治理品牌测评:海景房高盐高湿环境7大技术指标实测,谁扛得住回南天 - 环保除醛知识库
  • 5分钟获取免费OpenAI API密钥的终极指南:零成本解锁AI开发能力
  • 开发者有必要长期用 ChatGPT Plus 吗?从 Debug、代码解释和数据安全说清楚
  • 单视频生成多样性内容的技术原理与边界
  • 2026年青岛品牌首饰回收TOP榜|七家机构硬核实测 添价收黄金奢侈品回收最值得托付 - 薛定谔的梨花猫
  • Java 三大修饰符
  • 2026年全国知名中空板厂家行业三大趋势解读 - 速递信息
  • 索尼AI乒乓球机器人如何推动物理AI技术发展
  • 2026年西安企业高新技术认定与知识产权保护全攻略:五大服务机构深度对标 - 精选优质企业推荐官
  • 柔性化生产怎么抓?2026年异形物料吸盘吸嘴供应商优选指南 - 品牌2026
  • 3分钟掌握B站缓存视频转换:m4s-converter无损合并全攻略
  • 数据技能跃迁:从工具操作到业务建模的能力重构