← 返回文章列表
前端工程化·271 次阅读

GitHub Actions 实战:CI/CD 流水线从零搭建

GitHub Actions 实战:CI/CD 流水线从零搭建

基本概念

GitHub Actions 用 workflow(YAML 文件,放 .github/workflows/)描述自动化流程。结构:

  • on:触发条件(push、pull_request、tag、手动)
  • jobs:一组任务,默认并行,可设 needs 串行
  • steps:job 内的步骤,可执行命令或引用 action
  • 每个 job 跑在一台 runner(GitHub 托管的虚拟机或自建)

Node 项目完整 CI

name: CI

on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm # 自动按 lock 文件缓存 node_modules 下载

      - run: npm ci # CI 专用:严格按 lock 文件干净安装

      - run: npm run lint
      - run: npm run test
      - run: npm run build

npm ci 与 npm install 的区别:严格按 lock 文件、不修改它、速度快且可复现,是 CI 标准用法。

缓存策略

除了 setup-node 的内置缓存,自定义缓存用 actions/cache(如构建产物、Prisma 引擎)。缓存 key 带 lock 文件哈希,依赖变了自动失效。

部署(CD)

构建通过后部署到服务器,常见方式:

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      # 方式一:SSH 到服务器执行部署脚本
      - name: Deploy
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: deploy
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /var/www/app
            git pull
            npm ci
            npm run build
            pm2 reload ecosystem.config.cjs

Secrets 管理

密码、密钥一律放仓库 Settings → Secrets,配置里用 ${{ secrets.XXX }} 引用,日志会自动脱敏。永远不要把凭据写进 workflow 或提交进仓库。

实用经验

  • PR 必须等 CI 变绿才能合并(分支保护规则开启)
  • 部署步骤加超时和失败通知,避免挂死
  • 利用 matrix 做多版本测试(node 18/20/22)
  • 部署到 Serverless/Vercel 等平台有官方 action,更简单
  • workflow 也能跑定时任务(on.schedule)、issue 自动化

CI/CD 的收益:把"检查质量"和"上线发布"从手工操作变成可靠的自动化,一次配置长期受益。

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4