在 DevOps 实践中,CI/CD(持续集成 / 持续交付)是提升团队交付效率的核心引擎。过去部署靠手工敲命令、容易出错;现在用 GitHub Actions,只要 push 代码就能自动测试、构建、部署。本文手把手带你从零搭建一条可用的 CI/CD 流水线。
一、GitHub Actions 核心概念
动手前先理清四个关键词,否则配置文件会看不懂:
- Workflow(工作流):一个 YAML 文件,定义”什么事件触发、跑哪些任务”。存放在
.github/workflows/目录。 - Job(任务):一组按顺序执行的 step,默认多个 job 并行。不同 job 之间默认隔离。
- Step(步骤):job 里的最小执行单元,可以是一条 shell 命令或一个 Action。
- Action(动作):可复用的功能单元(如
actions/checkout拉代码),社区和官方提供了海量现成 Action。
二、第一个 Workflow:自动跑测试
新建 .github/workflows/ci.yml,下面是一个 Node.js 项目的最小可用配置:
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: 拉取代码
uses: actions/checkout@v4
- name: 安装 Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: 安装依赖
run: npm ci
- name: 运行测试
run: npm test
只要往 main 分支 push,GitHub 就会自动起一个 Ubuntu 环境,拉代码、装 Node、跑测试。红色 ✅ 变绿就说明流水线通过。
三、用缓存加速依赖安装
每次都重新 npm install 很慢。用 actions/cache 缓存 node_modules 或包管理器缓存目录,能把构建时间从几分钟压到几十秒:
- name: 缓存 npm 依赖
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-npm-
四、多环境部署:矩阵(Matrix)
需要在多个 Node 版本或操作系统上验证?用 matrix 一次跑多组组合:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- run: npm ci && npm test
五、与 Docker 集成:构建并推送镜像
很多项目最终要打成 Docker 镜像部署。结合我们之前写的 Docker Compose 一键编排实战,可以在 CI 里自动构建镜像并推送到镜像仓库:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 登录镜像仓库
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: 构建并推送
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: myrepo/app:${{ github.sha }}
六、安全管理密钥(Secrets)
密码、Token 绝不能写进 YAML。在仓库 Settings → Secrets and variables → Actions 里添加,Workflow 中通过 ${{ secrets.NAME }} 引用,GitHub 会自动脱敏。
七、常用官方 Action 速查
| Action | 作用 |
|---|---|
| actions/checkout | 拉取仓库代码 |
| actions/setup-node / setup-python | 安装运行环境 |
| actions/cache | 缓存依赖加速 |
| docker/build-push-action | 构建推送镜像 |
| actions/upload-artifact | 上传构建产物 |
八、常见坑
- 权限不足:推送镜像或写 Release 需要
permissions: write-all。 - 密钥没加:本地能跑、CI 报错,多半是 secret 名字拼错。
- 缓存 key 不变:锁文件没改 → 缓存永远命中也永远不更新,注意加锁文件 hash。
- Windows 换行符:shell 脚本在 Windows runner 上 \r\n 会炸,统一用 ubuntu 跑脚本类 step。
总结
GitHub Actions 把”测试—构建—部署”标准化成了几行 YAML。从今天的最小 CI 起步,再逐步接入 Docker 构建、多环境矩阵、自动部署,你的团队就能告别手工上线、减少”在我机器上是好的”这类问题。后续还可以探索 GitHub Environments 做审批式发布,把生产部署关进”双人复核”的安全栏里。




