如何创建Jenkins Pipeline全局使用项目.nvmrc定义的Node版本?
如何让Jenkins Pipeline所有阶段使用项目.nvmrc定义的Node版本?
问题分析
你尝试通过读取.nvmrc文件动态设置Pipeline的Node版本,但直接在全局tools块中使用后续阶段赋值的变量时出现错误:
ERROR: No jenkins.plugins.nodejs.tools.NodeJSInstallation named null found
这是因为**tools块在Pipeline启动初期就会执行**,此时nodeVersion变量还未被赋值(它是在第一个stage的步骤中才读取.nvmrc得到的),所以传入了null导致匹配失败。
解决方案
方案一:使用withNodeJS动态加载对应版本(依赖Jenkins NodeJS插件)
通过在每个需要Node环境的阶段中,读取.nvmrc后调用withNodeJS步骤加载对应版本,需确保Jenkins全局工具配置中存在与.nvmrc版本完全匹配的NodeJS安装项(名称要一致)。
示例脚本:
pipeline { agent { label 'test' } stages { stage('依赖安装') { steps { script { // 读取.nvmrc并去除多余换行符 def nodeVersion = readFile('.nvmrc').trim() withNodeJS(nodeJSInstallationName: nodeVersion) { sh 'node -v' sh 'npm install' } } } } stage('项目构建') { steps { script { def nodeVersion = readFile('.nvmrc').trim() withNodeJS(nodeJSInstallationName: nodeVersion) { sh 'node -v' sh 'npm run build' } } } } } }
方案二:直接用nvm在Shell中切换版本(无需Jenkins全局配置)
由于Pipeline的Shell是非交互式环境,.bashrc不会自动加载,需要手动加载nvm并切换到.nvmrc定义的版本,前提是构建机器已安装nvm和对应Node版本。
示例脚本:
pipeline { agent { label 'test' } environment { // 提前定义nvm加载路径,根据实际安装位置调整 NVM_PATH = "${HOME}/.nvm/nvm.sh" } stages { stage('读取Node版本') { steps { script { env.NODE_VERSION = readFile('.nvmrc').trim() } } } stage('依赖安装') { steps { sh """ source ${NVM_PATH} nvm use ${NODE_VERSION} node -v npm install """ } } stage('项目构建') { steps { sh """ source ${NVM_PATH} nvm use ${NODE_VERSION} npm run build """ } } } }
内容的提问来源于stack exchange,提问作者Aleksandar
相关产品推荐
相关产品推荐

