引言:为什么 JavaScript 项目需要 CI/CD
现代 Web 开发离不开自动化。每天,JavaScript (Node.js) 开发者都会面临重复性任务:运行测试、用 linter 检查代码、构建和部署应用程序。手动执行这些操作不仅耗时,而且容易出错。这时 CI/CD (Continuous Integration / Continuous Deployment) 就派上了用场——这是一种能够自动化软件生命周期所有阶段的方法论。
GitHub Actions 是 GitHub 平台内置的自动化工具,非常适合配置 CI/CD 流水线。在本文中,我们将详细讲解如何从零开始为 JavaScript (Node.js) 项目配置完整的自动化流程:从运行测试到部署到服务器。您将学习如何创建工作流、编写配置文件以及避免常见错误。
GitHub Actions 基础:结构与组件
在编写代码之前,让我们先了解 GitHub Actions 的关键概念。整个流水线由 YAML 文件描述,这些文件存储在您仓库的 .github/workflows 目录中。
工作流 (Workflow) 的关键元素
- Workflow — 是一个自动化的过程,由一个或多个 Job (任务) 组成。
- Job — 是在同一个 Runner (虚拟机) 上执行的一组步骤 (Step)。
- Step — 是一个单独的命令或操作 (Action)。
- Event — 触发工作流的事件 (例如,push, pull request)。
对于 JavaScript 项目,标准的工作流如下所示:
name: CI/CD для Node.js
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x]
steps:
- uses: actions/checkout@v4
- name: Установка Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Установка зависимостей
run: npm ci
- name: Линтинг
run: npm run lint
- name: Тесты
run: npm test
请注意 strategy.matrix — 这允许同时在多个 Node.js 版本上测试代码,这对于库和包来说至关重要。
为 Node.js 项目逐步配置 CI/CD
让我们看一个为典型的 Express.js Web 应用程序配置流水线的完整示例。从基础文件 .github/workflows/node-ci.yml 开始。
步骤 1:基础代码检查
name: Node.js CI
on:
push:
branches: [ develop, main ]
pull_request:
branches: [ main ]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Lint code
run: npm run lint
- name: Run unit tests
run: npm run test:unit
- name: Build project
run: npm run build
关键点:
cache: 'npm'— 缓存node_modules,加速后续运行。npm ci— 纯净安装依赖,比npm install更快更可靠。- 将测试分为 unit 和 integration (可选) 可以更快地获得反馈。
步骤 2:使用数据库进行集成测试
要使用真实数据库进行测试,请使用 GitHub Actions 的服务:
jobs:
integration-tests:
runs-on: ubuntu-latest
```