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項目的持續集成,提升開發效率和代碼質量。