当前位置: 首页 > news >正文

在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本

在Jenkins 中使用 NVM 管理 Node.js 部署项目的自动化脚本

在这里插入图片描述

人生旅途,总有人不断地走来,有人不断地离去。当新名字变成老名字,当老的名字渐渐模糊,又是一个故事的结束和另一个故事的开始。

在现代软件开发中,持续集成/持续部署(CI/CD)是提高开发效率和软件质量的重要实践。本文介绍了如何通过一个Bash脚本,在Jenkins中使用NVM(Node Version Manager)管理Node.js版本,并实现Node.js项目的自动化构建和部署。

脚本功能概述

这个脚本的主要功能包括:

  1. 设置环境变量
  2. 加载 NVM 并使用指定的 Node.js 版本
  3. 进入 Jenkins 工作目录并安装 Yarn
  4. 安装项目依赖
  5. 运行构建脚本
  6. 备份现有部署包
  7. 复制新的部署包到目标目录

脚本内容详解

以下是脚本的具体内容和逐步解释:

#!/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!"
脚本步骤详解
  1. 设置环境变量

    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,用于备份目录命名。
  2. 定义路径

    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工作空间中构建生成的目录路径。
  3. 确保脚本在任何错误时停止执行

    set -e
    

    启用此选项后,如果脚本中的任何命令失败(返回非零状态),脚本将立即退出。

  4. 加载 NVM

    if [ -s "$NVM_DIR/nvm.sh" ]; then. "$NVM_DIR/nvm.sh"
    elseecho "NVM 未安装或路径不正确"exit 1
    fi
    
    • 检查NVM的shell脚本是否存在并可读。
    • 如果存在,使用source命令加载NVM。
    • 如果不存在,输出错误信息并退出脚本。
  5. 使用指定的 Node.js 版本

    nvm install $NODE_VERSION
    nvm use $NODE_VERSION
    
    • 安装指定版本的Node.js。
    • 使用指定版本的Node.js。
  6. 进入工作目录并安装 Yarn

    cd $WORKSPACE_DIR
    npm install yarn -g
    yarn config set ignore-engines true
    
    • 进入Jenkins的工作目录。
    • 全局安装Yarn包管理器。
    • 配置Yarn忽略引擎检查(即使项目要求的Node.js版本与当前版本不一致,也不报错)。
  7. 安装项目依赖

    yarn install
    

    使用Yarn安装项目的所有依赖包。

  8. 运行构建脚本

    npm run build:test
    

    运行项目的构建脚本,生成测试环境的构建文件。

  9. 备份原来的包

    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
    
    • 检查目标部署目录是否存在。
    • 如果存在,将其移动到备份目录,并打印备份成功的消息。
    • 如果不存在,打印提示信息,跳过移动步骤。
  10. 复制新的包到目标目录

    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工作空间中的构建目录是否存在。
    • 如果存在,将其复制到目标部署目录,并打印复制成功的消息。
    • 如果不存在,打印错误信息并退出脚本。
  11. 打印构建成功的消息

    echo "Build successful!"
    

    构建完成后,打印成功消息。

总结

该脚本通过以下步骤实现了Node.js项目的自动化构建和部署:

  1. 设置和加载环境变量
  2. 使用NVM管理Node.js版本,确保使用指定的Node.js版本
  3. 安装项目依赖并运行构建脚本
  4. 备份现有的部署目录,确保可以在出错时回滚
  5. 复制新的构建文件到目标部署目录
  6. 打印构建成功的消息,方便追踪构建状态

通过使用这个脚本,您可以在Jenkins中实现一个稳定、高效的自动化构建和部署流程。

相关文章:

  • 全数仓体系建设规范V4.0
  • 中国出海企业“奔赴”俄罗斯蓝海 有哪些认知需要对齐? | TopOn变现干货
  • AI数字人本地算力直播怎么做?青否数字人教您快速搭建直播间!
  • 2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷7(私有云)
  • 构建高可用微服务:SpringCloud Alibaba解决方案揭秘
  • C# —— List数组
  • HTML跨年烟花
  • Flutter基础 -- Flutter布局练习(小项目)
  • python-doipclient 源文档翻译
  • 在编程Python的时候发生ModuleNotFoundError: No module named distutils报错怎么办
  • 07_查找
  • Crosslink-NX器件应用连载(9): USB3.0相机
  • 私有云和多云管理平台 | Cloudpods v3.11.4 正式发布
  • CSS学习笔记之高级教程(五)
  • 目标检测-AnyLabeling标注格式转换成YOLO格式
  • @angular/forms 源码解析之双向绑定
  • [译]Python中的类属性与实例属性的区别
  • 【EOS】Cleos基础
  • 07.Android之多媒体问题
  • Apache的80端口被占用以及访问时报错403
  • eclipse的离线汉化
  • ES6系列(二)变量的解构赋值
  • FineReport中如何实现自动滚屏效果
  • node.js
  • Redux 中间件分析
  • vue-router的history模式发布配置
  • 高度不固定时垂直居中
  • 诡异!React stopPropagation失灵
  • 基于 Babel 的 npm 包最小化设置
  • 利用jquery编写加法运算验证码
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (Git) gitignore基础使用
  • (pojstep1.1.2)2654(直叙式模拟)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (zt)最盛行的警世狂言(爆笑)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一)u-boot-nand.bin的下载
  • (转)Sublime Text3配置Lua运行环境
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • @SentinelResource详解
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [20161214]如何确定dbid.txt
  • [ANT] 项目中应用ANT
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [C++] Windows中字符串函数的种类
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream