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