Debian系统下JavaScript项目持续集成(CI)实施指南
持续集成(CI)是JavaScript项目开发中的关键环节,通过自动化代码验证、测试及构建,可快速发现代码缺陷、保证代码质量,并加速迭代流程。在Debian系统上,结合其开源特性与常用工具链,可实现高效、稳定的CI流程。
在配置CI之前,需完成以下系统与项目初始化:
git(版本控制)、nodejs/npm(JS依赖管理),推荐使用yarn提升依赖安装速度。通过以下命令安装:sudo apt update && sudo apt install -y git nodejs npm
sudo npm install -g yarn # 可选:更快的依赖管理
git init;.gitignore文件,排除node_modules/、dist/等无需提交的目录;package.json中定义核心脚本(必用),例如:"scripts": {
"test": "jest", // 测试框架(如Jest)
"lint": "eslint .", // 代码质量检查(如ESLint)
"build": "webpack --mode production" // 构建命令(如Webpack)
}
根据项目托管平台与团队需求,选择合适的CI工具:
GitHub Actions是Debian环境下最常用的CI工具之一,以下是具体配置流程:
创建CI配置文件:
在项目根目录下创建.github/workflows/ci.yml文件(若使用GitLab则为.gitlab-ci.yml),定义CI流程。以下是一个完整的Node.js项目配置示例:
name: CI/CD Pipeline
on:
push:
branches: [ main ] # 触发条件:main分支有推送
pull_request:
branches: [ main ] # 触发条件:对main分支的PR
jobs:
build-and-test:
runs-on: ubuntu-latest # 使用Ubuntu环境(Debian兼容)
steps:
# 1. 拉取代码
- uses: actions/checkout@v3
# 2. 设置Node.js环境(选择LTS版本,如18.x)
- name: Use Node.js 18.x
uses: actions/setup-node@v3
with:
node-version: '18'
# 3. 安装依赖(使用npm ci而非npm install,确保依赖版本严格一致)
- name: Install dependencies
run: npm ci
# 4. 运行代码质量检查(ESLint + Prettier)
- name: Lint code
run: npm run lint
# 5. 运行单元测试(Jest)
- name: Run tests
run: npm test
# 6. 构建项目(Webpack)
- name: Build project
run: npm run build
deploy:
needs: build-and-test # 仅在build-and-test成功后执行
if: github.ref == 'refs/heads/main' # 仅main分支触发部署
runs-on: ubuntu-latest
steps:
# 1. 拉取最新代码
- uses: actions/checkout@v3
# 2. 安装SSH客户端(用于连接Debian服务器)
- name: Install SSH client
run: sudo apt-get install -y openssh-client
# 3. 配置SSH密钥(需提前在GitHub Secrets中添加私钥)
- name: Configure SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan your-server-ip >> ~/.ssh/known_hosts # 替换为你的服务器IP
# 4. 传输构建产物到服务器(假设产物在dist/目录)
- name: Deploy to server
run: scp -r dist/* user@your-server-ip:/var/www/your-js-app/
# 5. 重启应用(使用PM2进程管理器)
- name: Restart application
run: ssh user@your-server-ip "pm2 restart your-app-name"
注:需将your-server-ip、user、your-js-app、your-app-name替换为实际服务器信息。
配置敏感信息:
部署时需用到SSH私钥,需将私钥添加到GitHub仓库的Settings > Secrets and variables > Actions中(变量名为SSH_PRIVATE_KEY)。
main分支或发起PR,GitHub Actions会自动检测变更并触发CI流程。npm ci而非npm install,确保依赖版本与package-lock.json严格一致,避免因依赖版本冲突导致的问题。jest --coverage添加),确保代码逻辑正确。dist/目录),优化代码体积与性能。/var/www/your-js-app/),并使用PM2重启Node.js应用,使新代码生效。actions/cache缓存node_modules,减少重复安装时间。例如:- uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
--maxWorkers参数并行运行测试,缩短测试时间。例如:- name: Run tests
run: npm test -- --maxWorkers=4
- name: Run tests with env
run: npm test
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
rollback命令快速回滚到上一版本:pm2 rollback your-app-name