npm:在 jenkins agent 上找不到,但可以通过 ssh 获得
npm: not found on jenkins agent, but available through ssh
我正在尝试建立一个使用多个代理的 jenkins 管道。代理是 ubuntu 个生活在云租赁 (openstack) 中的实例。在某些实例上尝试 运行 某些 npm
命令时,出现错误 npm: not found
。我已经阅读了多个其他主题,但我很难理解为什么找不到 npm。我自己设置了这些实例,我知道我安装了所有要求,包括节点和 npm。
假设我有 2 个节点 - agent1
在 IP1,agent2
在 IP2。他们都有用户名 cooluser1
的用户登录。当我执行 ssh cooluser1@IP1
或 ssh cooluser1@IP2
时,无论哪种情况,运行ning npm -v
都会给我一个正确的节点版本 (6.14.13)。但是,在我的管道中,IP2 实例中找不到 npm
。这是我的管道脚本:
pipeline {
agent {
node {
label 'agent1'
}
}
stages {
stage('Build'){
steps {
sh 'hostname -I'
sh 'echo "$USER"'
sh 'echo "$PATH"'
sh 'npm -v'
}
}
stage ('Run Tests'){
parallel {
stage('Running tests in parallel') {
agent {
node {
label 'agent2'
}
}
steps {
sh 'hostname -I'
sh 'echo "$USER"'
sh 'echo "$PATH"'
sh 'npm -v'
}
}
stage {
// more stuff running on another agent (agent3)
}
}
}
}
}
如您所见,在主代理 agent1
和并行阶段,我 运行 使用相同的代码,检查主机 IP、用户名、路径和npm
版本。 IP 符合预期 - IP1 和 IP2。两种情况下的 $USER 确实是 cooluser1
。路径看起来像这样:
// agent1
+ echo
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
// agent2
+ echo
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
有点奇怪,但两种情况都相同。
但是,当我到达 npm --v
时,对于 agent1
,我得到了一个版本号,并且我想要 运行 的任何 npm 命令都在工作。但是在 agent2
中,我得到 npm: not found
,如果我尝试使用任何 npm 命令,管道就会失败。完整的错误在这里:
+ npm -v
/home/vine/workspace/tend-multibranch_jenkins-testing@tmp/durable-d2a0251e/script.sh: 1: /home/vine/workspace/tend-multibranch_jenkins-testing@tmp/durable-d2a0251e/script.sh: npm: not found
但我清楚地看到 ssh cooluser1@IP2
该用户可以在该机器上使用 npm
。
这里可能出了什么问题?
我会建议你安装 nodejs 插件,在 'manage jenkins' -> 'global tools configurations' 中配置你想要的任何 nodejs 版本并在管道中设置 nodejs:
pipeline {
agent any
tools {
nodejs 'NodeJS_14.17.1'
}
stages {
stage ('nodejs test') {
steps {
sh 'npm -v'
}
}
}
}
我正在尝试建立一个使用多个代理的 jenkins 管道。代理是 ubuntu 个生活在云租赁 (openstack) 中的实例。在某些实例上尝试 运行 某些 npm
命令时,出现错误 npm: not found
。我已经阅读了多个其他主题,但我很难理解为什么找不到 npm。我自己设置了这些实例,我知道我安装了所有要求,包括节点和 npm。
假设我有 2 个节点 - agent1
在 IP1,agent2
在 IP2。他们都有用户名 cooluser1
的用户登录。当我执行 ssh cooluser1@IP1
或 ssh cooluser1@IP2
时,无论哪种情况,运行ning npm -v
都会给我一个正确的节点版本 (6.14.13)。但是,在我的管道中,IP2 实例中找不到 npm
。这是我的管道脚本:
pipeline {
agent {
node {
label 'agent1'
}
}
stages {
stage('Build'){
steps {
sh 'hostname -I'
sh 'echo "$USER"'
sh 'echo "$PATH"'
sh 'npm -v'
}
}
stage ('Run Tests'){
parallel {
stage('Running tests in parallel') {
agent {
node {
label 'agent2'
}
}
steps {
sh 'hostname -I'
sh 'echo "$USER"'
sh 'echo "$PATH"'
sh 'npm -v'
}
}
stage {
// more stuff running on another agent (agent3)
}
}
}
}
}
如您所见,在主代理 agent1
和并行阶段,我 运行 使用相同的代码,检查主机 IP、用户名、路径和npm
版本。 IP 符合预期 - IP1 和 IP2。两种情况下的 $USER 确实是 cooluser1
。路径看起来像这样:
// agent1
+ echo
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
// agent2
+ echo
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
有点奇怪,但两种情况都相同。
但是,当我到达 npm --v
时,对于 agent1
,我得到了一个版本号,并且我想要 运行 的任何 npm 命令都在工作。但是在 agent2
中,我得到 npm: not found
,如果我尝试使用任何 npm 命令,管道就会失败。完整的错误在这里:
+ npm -v
/home/vine/workspace/tend-multibranch_jenkins-testing@tmp/durable-d2a0251e/script.sh: 1: /home/vine/workspace/tend-multibranch_jenkins-testing@tmp/durable-d2a0251e/script.sh: npm: not found
但我清楚地看到 ssh cooluser1@IP2
该用户可以在该机器上使用 npm
。
这里可能出了什么问题?
我会建议你安装 nodejs 插件,在 'manage jenkins' -> 'global tools configurations' 中配置你想要的任何 nodejs 版本并在管道中设置 nodejs:
pipeline {
agent any
tools {
nodejs 'NodeJS_14.17.1'
}
stages {
stage ('nodejs test') {
steps {
sh 'npm -v'
}
}
}
}