深入理解 CI/CD:使用 GitHub Actions 自动化部署 Node.js 项目
本篇文章将带你从零搭建 GitHub Actions,实现 Node.js 项目的自动化构建、测试、部署,涵盖: ✅ GitHub Actions 基本概念✅ 编写 CI/CD 工作流(Workflow)✅ 运行测试(Jest)✅ 自动发布到服务器(PM2 + SSH)✅ 最佳实践与优化策略🚀 掌握 GitHub Actions,提升团队效率,让代码部署不再是难题!
深入理解 CI/CD:使用 GitHub Actions 自动化部署 Node.js 项目
一、前言
在现代软件开发中,持续集成(CI, Continuous Integration) 和 持续部署(CD, Continuous Deployment) 已成为提升开发效率和代码质量的重要实践。
本篇文章将带你从零搭建 GitHub Actions,实现 Node.js 项目的自动化构建、测试、部署,涵盖:
✅ GitHub Actions 基本概念
✅ 编写 CI/CD 工作流(Workflow)
✅ 运行测试(Jest)
✅ 自动发布到服务器(PM2 + SSH)
✅ 最佳实践与优化策略
🚀 掌握 GitHub Actions,提升团队效率,让代码部署不再是难题!
二、什么是 CI/CD?
2.1 CI/CD 工作流
CI/CD 是现代 DevOps 文化的核心,主要包括:
- CI(持续集成):开发者提交代码后,自动触发 代码检查、测试、构建 等流程。
- CD(持续部署):代码通过 CI 后,自动发布到 测试环境 / 生产环境,减少手动操作。
2.2 传统 vs 自动化部署
| 对比项 | 传统部署 | CI/CD 自动部署 |
|---|---|---|
| 构建方式 | 本地手动运行 npm build |
代码提交自动构建 |
| 测试方式 | 手动执行测试 | 代码提交自动运行测试 |
| 部署方式 | 手动 SSH 登录服务器 | 自动化远程部署 |
| 可靠性 | 易出错,难回滚 | 快速回滚,降低风险 |
三、GitHub Actions 介绍
GitHub Actions 是 GitHub 内置的 CI/CD 工具,允许开发者自动执行构建、测试、部署等任务。
3.1 GitHub Actions 核心概念
| 组件 | 作用 |
|---|---|
| Workflow | CI/CD 工作流 |
| Job | 具体任务(如构建、测试) |
| Step | Job 内的具体步骤 |
| Runner | 执行任务的服务器(GitHub 提供免费 Runner) |
| Event | 触发 Workflow 的事件(如 push, pull_request) |
四、创建 GitHub Actions 自动化部署
4.1 初始化 Node.js 项目
mkdir github-actions-demo && cd github-actions-demo
npm init -y
npm install express jest supertest pm2 --save
创建 server.js:
const express = require("express");
const app = express();
app.get("/", (req, res) => res.send("Hello GitHub Actions!"));
app.listen(3000, () => console.log("Server running on port 3000"));
module.exports = app;
创建 tests/server.test.js:
const request = require("supertest");
const app = require("../server");
test("GET / should return 'Hello GitHub Actions!'", async () => {
const res = await request(app).get("/");
expect(res.text).toBe("Hello GitHub Actions!");
});
4.2 创建 GitHub Actions 配置
在项目根目录创建 .github/workflows/main.yml:
name: Node.js CI/CD Workflow
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 拉取代码
uses: actions/checkout@v3
- name: 安装 Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: 安装依赖
run: npm install
- name: 运行测试
run: npm test
deploy:
needs: build # 只有 build 任务成功后才执行
runs-on: ubuntu-latest
steps:
- name: 部署到服务器
uses: appleboy/ssh-action@v0.1.7
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/github-actions-demo
git pull origin main
npm install
pm2 restart server
五、配置 GitHub Secrets
GitHub Actions 需要 SSH 访问服务器,需要配置 Secrets:
- 进入 GitHub 项目,点击
Settings>Secrets and variables>Actions - 添加以下 Secrets:
SSH_HOST:服务器 IP 地址SSH_USER:服务器 SSH 用户名SSH_KEY:私钥内容(id_rsa)
在服务器上设置 SSH Key
ssh-keygen -t rsa -b 4096 -C "github-actions"
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
然后将 id_rsa 复制到 GitHub Secrets SSH_KEY。
六、运行 GitHub Actions
提交代码到 GitHub:
git add .
git commit -m "Add GitHub Actions CI/CD"
git push origin main
进入 GitHub Actions 页面:
GitHub 项目 -> Actions -> 查看任务运行状态
成功后,服务器自动更新,项目已部署!🎉
七、优化 GitHub Actions
7.1 并行运行多个 Job
jobs:
build:
strategy:
matrix:
node-version: [14, 16, 18]
runs-on: ubuntu-latest
steps:
- name: 安装 Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
效果:多个 Node.js 版本同时运行测试,确保兼容性。
7.2 缓存 node_modules 提高速度
- name: 缓存 node_modules
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
效果:缓存
node_modules,提高安装速度。
7.3 仅在代码变更时运行 CI
on:
push:
paths:
- "server.js"
- "tests/**"
效果:仅当
server.js或tests/目录变更时才触发 CI/CD。
八、总结
| 步骤 | GitHub Actions 实现 |
|---|---|
| 自动构建 | npm install |
| 自动测试 | npm test |
| 自动部署 | SSH 部署到服务器 |
| 并行测试 | matrix |
| 缓存优化 | actions/cache |
🎯 GitHub Actions 是现代 DevOps 流程的核心,通过本篇文章,你已掌握 Node.js 项目的自动化部署流程,助你提升开发效率,让代码交付更快更稳定!🚀 🚀 🚀
更多推荐


所有评论(0)