强制Jenkins管道使用特定的节点版本

强制Jenkins管道使用特定的节点版本,jenkins,nvm,Jenkins,Nvm,我有一个Jenkins文件,它应该使用nvm在管道中安装特定的NodeJ。此管道使用安装了nvm的Jenkins代理。这就是Jenkins文件的外观: #!groovy pipeline { agent { label 'nvm' } options { // Add timestamps to the console output timestamps() // Avoid clutter - only keep the last 15 build

我有一个Jenkins文件,它应该使用nvm在管道中安装特定的NodeJ。此管道使用安装了nvm的Jenkins代理。这就是Jenkins文件的外观:

    #!groovy

pipeline {
   agent { label 'nvm' }
   options {
    // Add timestamps to the console output
    timestamps()
    // Avoid clutter - only keep the last 15 builds
    buildDiscarder(logRotator(numToKeepStr: '15', artifactNumToKeepStr: '15'))
    }
    environment {
    shortCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim().take(8)
    }
    stages {
       stage('Initialize Build') {
          steps {
          initBuild(commit: env.shortCommit)
          }
       }
      stage('Unit Test') {
    steps {
        echo "Running Tests!"
        sh """#!/bin/bash
            set -exuo pipefail
            /usr/local/nvm/nvm.sh use 10.16.3
            /usr/local/nvm/nvm.sh alias default 10.16.3
            which node
            node -v
            which nvm.sh
            nvm.sh --version
        """
        }
     }
   }

}
当我运行构建时,我总是在标准输出中看到:

16:00:48  + /usr/local/nvm/nvm.sh use 10.16.3
16:00:49  + /usr/local/nvm/nvm.sh alias default 10.16.3
16:00:49  + which node
16:00:49  /usr/bin/node
16:00:49  + node -v
16:00:49  v10.14.2
16:00:49  + which nvm.sh
16:00:49  /usr/local/nvm/nvm.sh
16:00:49  + nvm.sh --version

我注意到当我运行
哪个节点时,它总是指向
/usr/bin/node
。有没有一种方法可以在Jenkins文件中覆盖它,以便它实际使用我在nvm中配置的节点版本?因此,基本上我希望确保Jenkins管道指向nvm设置的指定节点版本

看起来您在Jenkins文件中只提供了“代理”。您还需要在“代理”内部提供额外的“节点”

确保在Jenkins服务器上创建了节点

   pipeline {
       agent { 
               node {  label 'nvm'} 
             }
    options {
    // Add timestamps to the console output

看起来您在Jenkins文件中只提供了“代理”。您还需要在“代理”内部提供额外的“节点”

确保在Jenkins服务器上创建了节点

   pipeline {
       agent { 
               node {  label 'nvm'} 
             }
    options {
    // Add timestamps to the console output

在管道中使用withENV设置不同版本的节点路径。

在管道中使用withENV设置不同版本的节点路径。

您可以直接使用节点10路径:

/usr/bin/node10 -v

您可以直接使用节点10路径:

/usr/bin/node10 -v

没用。。。。。仍然指向/usr/bin/node,而不是nvm设置的节点版本。您的节点是否命名为“nvm”?管道工作,但指向错误的节点版本。问题显然是关于正在使用的node.js版本,而不是关于Jenkins节点。此外,除非您想使用自定义工作空间,否则在
代理
指令中使用
节点
块是多余的。看,没用。。。。。仍然指向/usr/bin/node,而不是nvm设置的节点版本。您的节点是否命名为“nvm”?管道工作,但指向错误的节点版本。问题显然是关于正在使用的node.js版本,而不是关于Jenkins节点。此外,除非您想使用自定义工作空间,否则在
代理
指令中使用
节点
块是多余的。请参阅。由于默认情况下nvm安装是基于每个用户的,因此您可能希望通过运行
nvm list
@DibakarAditya检查您尝试设置为默认的Node.js版本是否已安装并可供Jenkins用户使用。我运行了该命令,但返回时没有输出。。因此,我尝试了一些更改,比如以Jenkins用户的身份运行nvm安装/使用,但它仍然指向/usr/bin/node,nvm列表没有将10.16.3作为一个版本。由于默认情况下nvm安装是基于每个用户的,您可能希望通过运行
nvm list
@DibakarAditya来检查您试图设置为默认值的Node.js版本是否已安装并可供Jenkins用户使用。我运行了该命令,但没有输出。。因此,我尝试了一些更改,比如以Jenkins用户的身份运行nvm安装/使用,但它仍然指向/usr/bin/node,nvm列表没有将10.16.3作为一个版本。