【发布时间】:2021-09-11 03:03:13
【问题描述】:
我正在尝试建立一个使用多个代理的 jenkins 管道。代理是居住在云租赁 (openstack) 中的 ubuntu 实例。当尝试在某些实例上运行一些npm 命令时,我收到错误npm: not found。我已经阅读了多个其他线程,但我很难理解为什么 npm 可能找不到。我自己设置了这些实例,并且我知道我安装了所有要求,包括 node 和 npm。
假设我有 2 个节点 - IP1 上的 agent1 和 IP2 上的 agent2。他们都有用户名cooluser1 的用户登录。当我执行ssh cooluser1@IP1 或ssh cooluser1@IP2 时,无论哪种情况,运行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 在该机器上可供该用户使用。
这里可能出了什么问题?
【问题讨论】:
标签: linux jenkins npm jenkins-pipeline