温馨提示×

Ubuntu Node.js项目如何进行持续集成

小樊
45
2025-09-21 07:14:18
栏目: 编程语言

Ubuntu Node.js项目持续集成(CI)实现指南
持续集成(CI)是Node.js项目开发中的关键环节,通过自动化代码集成、构建、测试和部署,提升开发效率并减少人为错误。以下是基于Ubuntu系统的常见实现方案及详细步骤:

一、基础环境准备

在Ubuntu服务器上,需提前安装以下工具:

  • Node.js与npm:用于Node.js项目运行和依赖管理。可通过NodeSource脚本安装指定版本(如16.x):
    curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
    验证安装:node -v(显示版本号)、npm -v(显示npm版本)。
  • Git:用于代码版本控制。安装命令:
    sudo apt install -y git
    
  • Docker(可选):用于容器化部署,确保环境一致性。安装命令:
    sudo apt update && sudo apt install -y docker.io
    sudo systemctl enable --now docker
    
  • Jenkins(可选):开源自动化服务器,用于构建复杂CI流水线。安装步骤参考Jenkins Ubuntu部署指南

二、常用CI工具及配置

1. GitHub Actions(云原生,适合小型项目)

GitHub Actions是GitHub提供的CI/CD服务,无需自建服务器,配置简单。

  • 步骤1:创建工作流文件
    在项目根目录下创建.github/workflows/ci.yml(或deploy.yml),定义CI流程。
  • 步骤2:基础配置示例
    以下示例实现“代码推送至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脚本)
    
  • 步骤3:扩展功能(部署)
    若需自动部署到Docker Hub或服务器,可添加以下步骤:
    • 部署到Docker Hub
      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访问令牌)。
    • 部署到Ubuntu服务器(SSH+PM2)
      使用appleboy/ssh-action插件,通过SSH连接到服务器,执行git pullnpm installpm2 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

2. Jenkins(自建,适合企业级复杂项目)

Jenkins是开源自动化服务器,支持复杂流水线(如多阶段构建、条件触发)。

  • 步骤1:安装Jenkins
    参考Jenkins Ubuntu部署指南,安装完成后启动服务:
    sudo systemctl start jenkins
    sudo systemctl enable jenkins
    
    访问http://<服务器IP>:8080,通过初始密码解锁并安装推荐插件(如PipelineGitHub IntegrationNodeJS)。
  • 步骤2:配置全局工具
    进入Manage Jenkins → Global Tool Configuration,配置以下工具:
    • Node.js:选择“自动安装”(指定版本,如16.x)或手动指定安装路径。
    • Git:填写Git安装路径(如/usr/bin/git)。
  • 步骤3:创建Pipeline任务
    • 新建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凭证(用于连接服务器)。

三、关键注意事项

  • 权限管理:确保GitHub Secrets中的敏感信息(如私钥、密码)加密存储,避免泄露。
  • 环境一致性:使用Docker或actions/setup-node插件,确保开发、测试、生产环境一致。
  • 日志与监控:通过pm2 logs查看应用日志,使用GitHub Actions或Jenkins的构建日志排查问题。
  • 触发条件:可根据需求配置触发条件(如pushpull_request、定时触发),避免频繁构建。

通过以上步骤,可实现Ubuntu Node.js项目的持续集成,提升开发效率和代码质量。

0