在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本
人生旅途,总有人不断地走来,有人不断地离去。当新名字变成老名字,当老的名字渐渐模糊,又是一个故事的结束和另一个故事的开始。
在现代软件开发中,持续集成/持续部署(CI/CD)是提高开发效率和软件质量的重要实践。本文介绍了如何通过一个Bash脚本,在Jenkins中使用NVM(Node Version Manager)管理Node.js版本,并实现Node.js项目的自动化构建和部署。
脚本功能概述
这个脚本的主要功能包括:
- 设置环境变量。
- 加载 NVM 并使用指定的 Node.js 版本。
- 进入 Jenkins 工作目录并安装 Yarn。
- 安装项目依赖。
- 运行构建脚本。
- 备份现有部署包。
- 复制新的部署包到目标目录。
脚本内容详解
以下是脚本的具体内容和逐步解释:
bash
#!/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"
else
echo "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" ]; then
mv "$dist_test_path" "$backup_path"
echo "Moved existing dist-test to $backup_path"
else
echo "No existing dist-test directory found, skipping move"
fi
# 覆盖新的包
if [ -d "$jenkins_dist_test_path" ]; then
cp -r "$jenkins_dist_test_path" "$dist_test_path"
echo "Copied new dist-test from Jenkins workspace to $dist_test_path"
else
echo "Jenkins dist-test directory not found at $jenkins_dist_test_path"
exit 1
fi
# 打印构建成功的消息
echo "Build successful!"
脚本步骤详解
-
设置环境变量
bashNODE_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
,用于备份目录命名。
-
定义路径
bashdist_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工作空间中构建生成的目录路径。
-
确保脚本在任何错误时停止执行
bashset -e
启用此选项后,如果脚本中的任何命令失败(返回非零状态),脚本将立即退出。
-
加载 NVM
bashif [ -s "$NVM_DIR/nvm.sh" ]; then . "$NVM_DIR/nvm.sh" else echo "NVM 未安装或路径不正确" exit 1 fi
- 检查NVM的shell脚本是否存在并可读。
- 如果存在,使用
source
命令加载NVM。 - 如果不存在,输出错误信息并退出脚本。
-
使用指定的 Node.js 版本
bashnvm install $NODE_VERSION nvm use $NODE_VERSION
- 安装指定版本的Node.js。
- 使用指定版本的Node.js。
-
进入工作目录并安装 Yarn
bashcd $WORKSPACE_DIR npm install yarn -g yarn config set ignore-engines true
- 进入Jenkins的工作目录。
- 全局安装Yarn包管理器。
- 配置Yarn忽略引擎检查(即使项目要求的Node.js版本与当前版本不一致,也不报错)。
-
安装项目依赖
bashyarn install
使用Yarn安装项目的所有依赖包。
-
运行构建脚本
bashnpm run build:test
运行项目的构建脚本,生成测试环境的构建文件。
-
备份原来的包
bashif [ -d "$dist_test_path" ]; then mv "$dist_test_path" "$backup_path" echo "Moved existing dist-test to $backup_path" else echo "No existing dist-test directory found, skipping move" fi
- 检查目标部署目录是否存在。
- 如果存在,将其移动到备份目录,并打印备份成功的消息。
- 如果不存在,打印提示信息,跳过移动步骤。
-
复制新的包到目标目录
bashif [ -d "$jenkins_dist_test_path" ]; then cp -r "$jenkins_dist_test_path" "$dist_test_path" echo "Copied new dist-test from Jenkins workspace to $dist_test_path" else echo "Jenkins dist-test directory not found at $jenkins_dist_test_path" exit 1 fi
- 检查Jenkins工作空间中的构建目录是否存在。
- 如果存在,将其复制到目标部署目录,并打印复制成功的消息。
- 如果不存在,打印错误信息并退出脚本。
-
打印构建成功的消息
bashecho "Build successful!"
构建完成后,打印成功消息。
总结
该脚本通过以下步骤实现了Node.js项目的自动化构建和部署:
- 设置和加载环境变量。
- 使用NVM管理Node.js版本,确保使用指定的Node.js版本。
- 安装项目依赖并运行构建脚本。
- 备份现有的部署目录,确保可以在出错时回滚。
- 复制新的构建文件到目标部署目录。
- 打印构建成功的消息,方便追踪构建状态。
通过使用这个脚本,您可以在Jenkins中实现一个稳定、高效的自动化构建和部署流程。