Jenkinsfile
)并且我需要更改节点版本。我添加了 Nvm Wrapper 插件,但我不知道如何正确使用它
Jenkinsfile
我应该在nvm('...') {}
内添加
steps
吗?或者它应该位于
node
步骤中的顶级位置? 目前我什至没有
node
步骤 - 一切都是使用
sh
完成的
pipeline {
agent any
stages {
stage("Build") {
steps {
nvm(nvmInstallURL: 'https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh',
nvmIoJsOrgMirror: 'https://iojs.org/dist',
nvmNodeJsOrgMirror: 'https://nodejs.org/dist',
version: '8.1.2') {
sh "npm install"
echo "Build main site distribution"
sh "npm run build:dist"
}
}
}
...
sh 'bash -l -c ". $HOME/.nvm/nvm.sh ; nvm use <version> || nvm install <version> && nvm use <version> "'
示例:
sh 'bash -l -c ". $HOME/.nvm/nvm.sh ; nvm use 8.0 || nvm install 8.0 && nvm use 8.0 "'
上面的解决方案对我来说不起作用,因为我需要在调用 nvm 命令后在路径上设置 node+npm 二进制文件。以下是对其他解决方案的改编,替换了脚本化管道中的 nvm-wrapper:
env.ECHO_CMD = 'echo $NVM_BIN'
env.NVM_BIN = sh (
script: 'bash -l -c "source $HOME/.nvm/nvm.sh 1>&2; nvm use $NODE_VERSION 1>&2 || nvm install $NODE_VERSION 1>&2 && nvm use $NODE_VERSION 1>&2 && $ECHO_CMD "',
returnStdout: true
).trim()
echo "NVM_BIN: ${env.NVM_BIN}"
env.PATH = "${env.NVM_BIN}:${env.PATH}"
// do some node stuff in sh commands...
sh 'node --version'
sh 'npm --version'
sh 'bash -l -c ". $HOME/.nvm/nvm.sh ; nvm use || nvm install && nvm use"'
这需要 nvm 安装在 jenkins 主文件夹中。但添加一个首先在正确位置下载 nvm 的步骤会很容易。
nvm.sh 脚本将检查“nodejs/index.tab”和“iojs/index.tab”,然后验证是否使用 nvm_is_version_installed 安装版本。
nvm 包装器应为 Node.js 或 io.js(不是两者)设置环境变量,并防止外部变量(例如“HTTP_PROXY”)干扰。
您的管道脚本应遵循以下模式:
pipeline {
agent {
label '!windows'
}
stages {
stage("Build-MMM") {
steps {
nvm(nvmInstallURL: 'https://gitee.com/mirrors/nvm/raw/master/install.sh',
nvmNodeJsOrgMirror: 'https://npmmirror.org/mirrors/node && NVM_IOJS_ORG_MIRROR=https://npmmirror.org/mirrors/iojs',
nvmIoJsOrgMirror: 'https://npmmirror.org/mirrors/iojs && NVM_NODEJS_ORG_MIRROR=https://npmmirror.org/mirrors/node',
version: '16') {
...
}
}
}
...