【问题标题】:npm: not found on jenkins agent, but available through sshnpm:在 jenkins 代理上找不到,但可以通过 ssh 获得
【发布时间】:2021-09-11 03:03:13
【问题描述】:

我正在尝试建立一个使用多个代理的 jenkins 管道。代理是居住在云租赁 (openstack) 中的 ubuntu 实例。当尝试在某些实例上运行一些npm 命令时,我收到错误npm: not found。我已经阅读了多个其他线程,但我很难理解为什么 npm 可能找不到。我自己设置了这些实例,并且我知道我安装了所有要求,包括 node 和 npm。

假设我有 2 个节点 - IP1 上的 agent1 和 IP2 上的 agent2。他们都有用户名cooluser1 的用户登录。当我执行ssh cooluser1@IP1ssh 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


    【解决方案1】:

    我会建议你安装 nodejs 插件,在“管理 jenkins”->“全局工具配置”中配置你想要的任何 nodejs 版本并在管道中设置 nodejs:

    pipeline {
      agent any
      tools {
        nodejs 'NodeJS_14.17.1'
      }
      stages {
        stage ('nodejs test') {
          steps {
            sh 'npm -v'
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 2021-06-18
      相关资源
      最近更新 更多