如何在Jenkins中添加节点到PATH?

zzzyeukh  于 2023-08-03  发布在  Jenkins
关注(0)|答案(3)|浏览(132)

我已将Jenkins启动到我的虚拟机代理。虚拟机是Ubuntu 20.04。当我在VM上运行node -v时,我得到v16.20.1。但是当我在Jenkins中运行这个管道时:

pipeline {

    agent {
        label 'ubuntu-server'
    }
    stages {
        stage('Hello World') {
            steps {
                sh '/home/jenkins/.nvm/versions/node/v16.20.1/bin/node -v' //1
                sh 'node -v' //2
            }
        }
    }
}

字符串
第一个“sh”命令返回节点版本,但第二个命令给出错误消息:

+ /home/jenkins/.nvm/versions/node/v16.20.1/bin/node -v
v16.20.1
+ node -v
/home/jenkins/jenkins_slave/workspace/forgejo-app@tmp/durable-90f345a5/script.sh: 1: node: not found


我认为这是PATH变量的问题,所以我找到了这个解决方案:

pipeline {

    agent {
        label 'ubuntu-server'
    }
    stages {
        stage('Hello World') {
            steps {
                withEnv( ["PATH=/home/jenkins/.nvm/versions/node/v16.20.1/bin/node:$env.PATH"]){
                    sh 'echo $PATH'
                    sh 'node -v'
                }
            }
        }
    }
}


但这是没有帮助的,我仍然得到同样的错误:

+ node -v
/home/jenkins/jenkins_slave/workspace/forgejo-app@tmp/durable-a9e9321a/script.sh: 1: node: not found


我还检查了durable-a9 e9321 a/script.sh文件中的内容,它是空的。

cigdeys3

cigdeys31#

您的Jenkins执行者可能没有运行此命令的授权。我不能给予你更多的细节,因为我的工作主要是在Windows上,但尝试使用sudo node -v

slmsl1lt

slmsl1lt2#

您可以切换用户到jenkins(su jenkins)并从jenkins用户安装node。会干净得多,而且总是有效的
出现问题是因为jenkins在jenkins用户下运行executor,而您在另一个用户(您的个人用户)下测试所有内容

monwx1rj

monwx1rj3#

我已经像这样改变了我的管道,现在它正在工作:

pipeline {

    agent {
        label 'ubuntu-server'
    }
    environment{
        PATH = "/home/jenkins/.nvm/versions/node/v16.20.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
    }    
    stages {
        stage('Hello World') {
            steps {
                sh 'node -v'
                sh 'npm -v'
                sh 'pwd'
                sh 'go version'
                cleanWs()
            }
        }
    }
}

字符串

相关问题