Ubuntu Node.js项目持续集成(CI)实现指南
持续集成(CI)是Node.js项目开发中的关键环节,通过自动化代码集成、构建、测试和部署,提升开发效率并减少人为错误。以下是基于Ubuntu系统的常见实现方案及详细步骤:
在Ubuntu服务器上,需提前安装以下工具:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
验证安装:node -v(显示版本号)、npm -v(显示npm版本)。sudo apt install -y git
sudo apt update && sudo apt install -y docker.io
sudo systemctl enable --now docker
GitHub Actions是GitHub提供的CI/CD服务,无需自建服务器,配置简单。
.github/workflows/ci.yml(或deploy.yml),定义CI流程。main分支时,自动安装依赖、运行测试”:name: Node.js CI
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
jobs:
  build-and-test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16.x]  # 指定Node.js版本
    steps:
    - name: Checkout code
      uses: actions/checkout@v3  # 拉取代码
    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
    - name: Install dependencies
      run: npm install  # 安装项目依赖
    - name: Run tests
      run: npm test  # 运行测试(需项目中有test脚本)
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version: 16.x
    - name: Install dependencies
      run: npm install
    - name: Build Docker image
      run: docker build -t your-dockerhub-username/repo-name:latest .
    - name: Login to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
    - name: Push Docker image
      run: docker push your-dockerhub-username/repo-name:latest
需在GitHub仓库Settings → Secrets中添加DOCKER_USERNAME(Docker Hub用户名)、DOCKER_PASSWORD(Docker Hub访问令牌)。appleboy/ssh-action插件,通过SSH连接到服务器,执行git pull、npm install、pm2 reload等命令:jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
    - name: SSH Deploy
      uses: appleboy/ssh-action@v0.1.10
      with:
        host: ${{ secrets.SERVER_IP }}
        username: root
        key: ${{ secrets.SSH_PRIVATE_KEY }}  # 服务器SSH私钥
        script: |
          cd /var/www/your-app  # 项目部署路径
          git pull origin main
          npm install --production
          pm2 reload ecosystem.config.js --env production
需在GitHub Secrets中添加SERVER_IP(服务器公网IP)、SSH_PRIVATE_KEY(服务器SSH私钥),并在服务器上配置PM2的ecosystem.config.js。Jenkins是开源自动化服务器,支持复杂流水线(如多阶段构建、条件触发)。
sudo systemctl start jenkins
sudo systemctl enable jenkins
访问http://<服务器IP>:8080,通过初始密码解锁并安装推荐插件(如Pipeline、GitHub Integration、NodeJS)。Manage Jenkins → Global Tool Configuration,配置以下工具:
/usr/bin/git)。Pipeline任务,配置Source Code Management(选择Git,填写仓库URL和凭证)。Pipeline脚本中定义流水线(支持Groovy语法),示例如下:pipeline {
  agent any
  environment {
    NODE_ENV = 'production'
  }
  stages {
    stage('Checkout') {
      steps {
        git branch: 'main', url: 'https://github.com/your-username/your-repo.git'
      }
    }
    stage('Install Dependencies') {
      steps {
        sh 'npm install'
      }
    }
    stage('Run Tests') {
      steps {
        sh 'npm test'
      }
    }
    stage('Deploy to Server') {
      steps {
        sshagent(['your-ssh-credential-id']) {  // 关联Jenkins SSH凭证
          sh '''
            ssh root@your-server-ip "cd /var/www/your-app && git pull origin main && npm install --production && pm2 reload ecosystem.config.js --env production"
          '''
        }
      }
    }
  }
}
需在JenkinsCredentials中添加GitHub凭证(用于拉取代码)和SSH凭证(用于连接服务器)。actions/setup-node插件,确保开发、测试、生产环境一致。pm2 logs查看应用日志,使用GitHub Actions或Jenkins的构建日志排查问题。push、pull_request、定时触发),避免频繁构建。通过以上步骤,可实现Ubuntu Node.js项目的持续集成,提升开发效率和代码质量。