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 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. 安装依赖(使用缓存加速,减少重复下载)
- name: Install dependencies
run: npm ci # 推荐使用npm ci而非npm install,确保依赖版本严格一致
# 4. 运行代码质量检查(ESLint + Prettier)
- name: Lint code
run: npm run lint # 需在package.json中配置"lint": "eslint ."
# 5. 运行单元测试(Jest)
- name: Run tests
run: npm test # 需在package.json中配置"test": "jest"
# 6. 构建项目(Webpack)
- name: Build project
run: 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-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. 部署到Debian服务器(使用scp传输构建产物)
- name: Deploy to Debian server
run: |
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项目的持续集成与持续交付,提高开发效率和应用稳定性。