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项目的持续集成,提升开发效率和代码质量。