Debian系统下JavaScript项目持续集成与持续交付(CI/CD)实现指南

在Debian系统上实现JS项目的CI/CD,需先搭建核心工具链:
npm或yarn管理项目依赖,生成package-lock.json/yarn.lock锁定版本,确保一致性。GitHub Actions是Debian环境下实现JS项目CI/CD的高效选择,无需额外搭建服务器,直接与GitHub仓库集成。
在项目根目录下创建.github/workflows/ci.yml文件(若使用GitLab则为.gitlab-ci.yml),定义CI流程。以下是一个完整的Node.js项目配置示例:
name: CI/CD Pipelineon:push:branches: [ main ]# 触发条件:main分支有推送pull_request:branches: [ main ]# 触发条件:对main分支的PRjobs: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.xuses: actions/setup-node@v3with:node-version: '18'# 3. 安装依赖(使用缓存加速,减少重复下载)- name: Install dependenciesrun: npm ci# 推荐使用npm ci而非npm install,确保依赖版本严格一致# 4. 运行代码质量检查(ESLint + Prettier)- name: Lint coderun: npm run lint# 需在package.json中配置"lint": "eslint ."# 5. 运行单元测试(Jest)- name: Run testsrun: npm test# 需在package.json中配置"test": "jest"# 6. 构建项目(Webpack)- name: Build projectrun: npm run build# 需在package.json中配置"build": "webpack --mode production"deploy:needs: build-and-test# 仅在build-and-test成功后执行if: github.ref == 'refs/heads/main'# 仅main分支触发部署runs-on: ubuntu-lateststeps:# 1. 拉取最新代码- uses: actions/checkout@v3# 2. 安装SSH客户端(用于连接Debian服务器)- name: Install SSH clientrun: sudo apt-get install -y openssh-client# 3. 配置SSH密钥(需提前在GitHub Secrets中添加私钥)- name: Configure SSHrun: |mkdir -p ~/.sshecho "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsachmod 600 ~/.ssh/id_rsassh-keyscan your-server-ip >> ~/.ssh/known_hosts# 替换为你的服务器IP# 4. 部署到Debian服务器(使用scp传输构建产物)- name: Deploy to Debian serverrun: |scp -r dist/* user@your-server-ip:/var/www/your-js-app/# 替换为用户、服务器IP和部署路径ssh user@your-server-ip "cd /var/www/your-js-app && pm2 restart your-app-name"# 使用PM2重启应用确保package.json中包含CI流程所需的脚本,示例如下:
{"scripts": {"lint": "eslint .",// 代码风格检查"test": "jest",// 单元测试"build": "webpack --mode production",// 生产环境构建"start": "node app.js" // 应用启动(可选)},"devDependencies": {"eslint": "^8.0.0","jest": "^29.0.0","webpack": "^5.0.0"}}ssh-keygen -t rsa -b 4096。id_rsa.pub)添加到GitHub仓库的Settings > Secrets and variables > Actions中(变量名为SSH_PUBLIC_KEY)。id_rsa)添加到GitHub Secrets中(变量名为SSH_PRIVATE_KEY)。CI流程的核心是通过自动化脚本验证代码的正确性,确保每次提交都不会引入错误。典型流程如下:
main分支或发起PR。npm ci安装项目依赖(比npm install更严格,避免依赖版本冲突)。dist/目录)。CD是CI的延伸,将经过验证的代码自动部署到生产环境。在Debian服务器上的典型流程如下:
needs关键字关联)。scp命令将构建产物(如dist/目录)传输到服务器指定目录(如/var/www/your-js-app/)。pm2 restart your-app-name)。actions/cache缓存node_modules,减少重复安装时间(如- uses: actions/cache@v3)。--maxWorkers参数并行运行测试,缩短测试时间。rollback命令快速回滚到上一版本。通过以上步骤,即可在Debian系统上实现JavaScript项目的持续集成与持续交付,提高开发效率和应用稳定性。