Jenkins 下使用 Node 和 Npm(借助 nvm-wrapper 插件)

Published: 2023-01-10

Tags: Jenkins


前几天安装前端包依赖包报错,定位到的原因是构建机器的 Npm 版本过低,当时的解决方案是直接升级了构建机器的 Node 版本,如果构建机器较多,升级和维护环境也是个麻烦事儿,以下是对 Jenkins 环境使用 node 命令的几种方式整理。

  • 在构建的机器上直接安装 Node 指定版本
  • 借助 nvm-wrapper 插件安装指定版本,这种方式可以同时使用多个版本(推荐)
  • 构建机器上安装 nvm,Shell 脚本中加载 nvm 环境变量(仅限自由软件风格)

直接安装

Ubuntu 20.04

# Add NodeSource PPA
$ curl -s https://deb.nodesource.com/setup_16.x | sudo bash

# Install NodeJS 16
$ sudo apt install nodejs -y

# Confirm the installed version of NodeJS
$ node -v

使用 jenkins 插件 nvm-wrapper

插件地址:https://plugins.jenkins.io/nvm-wrapper/

安装:“系统管理” - “插件管理” - 搜索 “nvm-wrapper” 并安装,重启后生效。借助 nvm-wrapper,它能自动判断当 node 版本不存在时自动下载。

自由软件风格的使用

首先指定在 nvm 模式下使用 Node(Run the build in an NVM managed environment)

其它参数选填,留空后的字段会在运行后自动填充上内容。

而后的 Shell 脚本中,可以直接使用 nodenvm 命令。

流水线 Pipeline 中使用

Jenkinsfile

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
                nvm("v12.0.0") {
                    sh 'node -v'
                }
                nvm("v16.19.0") {
                    sh 'node -v'
                }
            }
        }
    }
}

Shell 脚本加载 nvm 环境变量

这种方式直接将 nvm 安装后加载的环境变量复制到脚本中,临时调试或特殊场景可能会用到,不推荐。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

npm --registry https://registry.npmjs.org install
npm run build:stage

运行流水线,指定版本 Node 成功,输入内容如下

参考