在Jenkins 中使用 NVM 管理 Node.js 部署項目的自動化腳本
人生旅途,總有人不斷地走來,有人不斷地離去。當新名字變成老名字,當老的名字漸漸模糊,又是一個故事的結束和另一個故事的開始。
在現代軟件開發中,持續集成/持續部署(CI/CD)是提高開發效率和軟件質量的重要實踐。本文介紹了如何通過一個Bash腳本,在Jenkins中使用NVM(Node Version Manager)管理Node.js版本,并實現Node.js項目的自動化構建和部署。
腳本功能概述
這個腳本的主要功能包括:
- 設置環境變量。
- 加載 NVM 并使用指定的 Node.js 版本。
- 進入 Jenkins 工作目錄并安裝 Yarn。
- 安裝項目依賴。
- 運行構建腳本。
- 備份現有部署包。
- 復制新的部署包到目標目錄。
腳本內容詳解
以下是腳本的具體內容和逐步解釋:
#!/bin/bash
BUILD_ID=DONTKILLME
# 設置必要的環境變量
NODE_VERSION="17.0.0"
NVM_DIR="/usr/local/src/nvm/nvm-0.39.7"
WORKSPACE_DIR="/home/jenkins/jenkins_home/workspace/lowcode-web"
current_datetime=$(date +%Y-%m-%d_%H-%M-%S)
# Paths
dist_test_path="/home/lowcode-platform/lowcode-web/dist-test"
backup_path="/home/lowcode-platform/lowcode-web/dist-test_$current_datetime"
jenkins_dist_test_path="/home/jenkins/jenkins_home/workspace/lowcode-web/dist-test"
# 確保腳本在任何錯誤時停止執行
set -e# 加載 NVM (Node Version Manager)
if [ -s "$NVM_DIR/nvm.sh" ]; then. "$NVM_DIR/nvm.sh"
elseecho "NVM 未安裝或路徑不正確"exit 1
fi# 使用指定的 Node.js 版本
nvm install $NODE_VERSION
nvm use $NODE_VERSION# 進入工作目錄
cd $WORKSPACE_DIR# 安裝 Yarn
npm install yarn -g
# 忽略引擎檢查
yarn config set ignore-engines true
# 安裝項目依賴
yarn install
# 運行構建腳本
npm run build:test# 部署包
# 備份原來的包
if [ -d "$dist_test_path" ]; thenmv "$dist_test_path" "$backup_path"echo "Moved existing dist-test to $backup_path"
elseecho "No existing dist-test directory found, skipping move"
fi# 覆蓋新的包
if [ -d "$jenkins_dist_test_path" ]; thencp -r "$jenkins_dist_test_path" "$dist_test_path"echo "Copied new dist-test from Jenkins workspace to $dist_test_path"
elseecho "Jenkins dist-test directory not found at $jenkins_dist_test_path"exit 1
fi# 打印構建成功的消息
echo "Build successful!"
腳本步驟詳解
-
設置環境變量
NODE_VERSION="17.0.0" NVM_DIR="/usr/local/src/nvm/nvm-0.39.7" WORKSPACE_DIR="/home/jenkins/jenkins_home/workspace/lowcode-web" current_datetime=$(date +%Y-%m-%d_%H-%M-%S)
NODE_VERSION
:指定要使用的Node.js版本。NVM_DIR
:NVM的安裝路徑。WORKSPACE_DIR
:Jenkins的工作目錄路徑。current_datetime
:當前日期和時間,格式為YYYY-MM-DD_HH-MM-SS
,用于備份目錄命名。
-
定義路徑
dist_test_path="/home/lowcode-platform/lowcode-web/dist-test" backup_path="/home/lowcode-platform/lowcode-web/dist-test_$current_datetime" jenkins_dist_test_path="/home/jenkins/jenkins_home/workspace/lowcode-web/dist-test"
dist_test_path
:目標部署目錄的路徑。backup_path
:備份目錄的路徑,帶有當前日期和時間。jenkins_dist_test_path
:Jenkins工作空間中構建生成的目錄路徑。
-
確保腳本在任何錯誤時停止執行
set -e
啟用此選項后,如果腳本中的任何命令失敗(返回非零狀態),腳本將立即退出。
-
加載 NVM
if [ -s "$NVM_DIR/nvm.sh" ]; then. "$NVM_DIR/nvm.sh" elseecho "NVM 未安裝或路徑不正確"exit 1 fi
- 檢查NVM的shell腳本是否存在并可讀。
- 如果存在,使用
source
命令加載NVM。 - 如果不存在,輸出錯誤信息并退出腳本。
-
使用指定的 Node.js 版本
nvm install $NODE_VERSION nvm use $NODE_VERSION
- 安裝指定版本的Node.js。
- 使用指定版本的Node.js。
-
進入工作目錄并安裝 Yarn
cd $WORKSPACE_DIR npm install yarn -g yarn config set ignore-engines true
- 進入Jenkins的工作目錄。
- 全局安裝Yarn包管理器。
- 配置Yarn忽略引擎檢查(即使項目要求的Node.js版本與當前版本不一致,也不報錯)。
-
安裝項目依賴
yarn install
使用Yarn安裝項目的所有依賴包。
-
運行構建腳本
npm run build:test
運行項目的構建腳本,生成測試環境的構建文件。
-
備份原來的包
if [ -d "$dist_test_path" ]; thenmv "$dist_test_path" "$backup_path"echo "Moved existing dist-test to $backup_path" elseecho "No existing dist-test directory found, skipping move" fi
- 檢查目標部署目錄是否存在。
- 如果存在,將其移動到備份目錄,并打印備份成功的消息。
- 如果不存在,打印提示信息,跳過移動步驟。
-
復制新的包到目標目錄
if [ -d "$jenkins_dist_test_path" ]; thencp -r "$jenkins_dist_test_path" "$dist_test_path"echo "Copied new dist-test from Jenkins workspace to $dist_test_path" elseecho "Jenkins dist-test directory not found at $jenkins_dist_test_path"exit 1 fi
- 檢查Jenkins工作空間中的構建目錄是否存在。
- 如果存在,將其復制到目標部署目錄,并打印復制成功的消息。
- 如果不存在,打印錯誤信息并退出腳本。
-
打印構建成功的消息
echo "Build successful!"
構建完成后,打印成功消息。
總結
該腳本通過以下步驟實現了Node.js項目的自動化構建和部署:
- 設置和加載環境變量。
- 使用NVM管理Node.js版本,確保使用指定的Node.js版本。
- 安裝項目依賴并運行構建腳本。
- 備份現有的部署目錄,確保可以在出錯時回滾。
- 復制新的構建文件到目標部署目錄。
- 打印構建成功的消息,方便追蹤構建狀態。
通過使用這個腳本,您可以在Jenkins中實現一個穩定、高效的自動化構建和部署流程。