【问题标题】:Jenkins unable to find npm詹金斯找不到 npm
【发布时间】:2018-02-05 10:20:02
【问题描述】:

在这个 linux 服务器上,我有一个名为“myuser”的用户。 对于这个用户,在回显路径时,我得到了这个:

/home/myuser/bin:/home/myuser/.local/bin:/home/myuser/.nvm/versions/node/v6.11.1/bin:/usr/local/sbin:/usr/local/ bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

有一个节点应用程序,手动部署时我运行:

npm i

它有效。

现在,我安装了 Jenkins。我尝试安装的 Jenkins 项目位于:

/var/lib/jenkins/workspace/test

构建正在执行一个 shell 脚本。在那个窗口中我输入了:

#!/bin/bash
npm i

使用 Jenkins 构建时,我得到了这个:

[test] $ /bin/bash /tmp/jenkins756533162549346948.sh
/tmp/jenkins756533162549346948.sh: line 3: npm: command not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE

如果我只写:

echo $PATH

在 Jenkins shell 中,我得到了这个:

[test] $ /bin/sh -xe /tmp/jenkins5067097808572366507.sh
+ echo /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
[test] $ /var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/6.11.1/bin/node /tmp/jenkins8733250738704177758.js
Finished: SUCCESS

如您所见,我安装了 nodejs 插件。 无论如何,在使用 Jenkins shell 时,找不到 npm 甚至节点。 如何让 Jenkins 知道 npm/node 在哪里? 我尝试先在 shell 中写这个:

$PATH=/home/myuser/.nvm/versions/node/v6.11.1/bin

但还是没有运气。

【问题讨论】:

  • Jenkins 启动了一个新的 shell...
  • 因此您可能希望在 jenkins 脚本本身中获取更新路径..
  • 是的,我更新了 jenkins shell 本身的路径,但仍然没有运气。
  • 我使用了this tutorial(只是开始)

标签: node.js linux jenkins npm


【解决方案1】:

我已经为此奋斗了一段时间。终于找到了解决办法。从您的工作菜单中选择Configure,在Build Environment 下选择Provide Node & npm bin/ folder to PATH 您可以保留默认设置,一切顺利。

正如 Eric Wang 在 cmets 中所指定的,需要先安装 NodeJS Plugin 才能出现此选项: https://wiki.jenkins.io/display/JENKINS/NodeJS+Plugin

【讨论】:

  • 好像需要先安装node plugin,才能得到这个选项。
  • 安装节点插件并提供构建环境后工作。谢谢
  • 我安装了 NodeJS 插件,但没有构建环境部分,是否需要其他内容才能看到?
  • @ocramot 你能找到解决方法吗?
  • @user805981 我在下面使用了 DenLilleMand 的解决方案。
【解决方案2】:

这个线程中的答案对我没有帮助,帮助是将 node.js 工具添加到我的 Jenkinsfile 中:

pipeline {
  agent any

  tools {nodejs "nodejs"}

  stages {
    stage('Example') {
      steps {
        sh 'npm config ls'
      }
    }
  }
}

字符串"nodejs"name 你在global tool configuration 中给node.js 工具的地方

【讨论】:

    【解决方案3】:

    只要为jenkins安装nodeJS plugin,就可以找到here

    安装插件后,重启jenkins,到全局配置中指定版本。

    配置的完整细节可以在上面链接的插件文档中找到。


    jenkins 2.x 更新

    在 jenkins 2.x 中进入插件页面:

    只需转到Manage Jenkins > Manage Plugins 视图,Jenkins 环境的管理员可以使用该视图。 - https://jenkins.io/doc/book/managing/plugins/

    但是,我确实建议使用 pipelines 而不是 CI 流程的插件:

    管道是描述软件交付管道部分的说明。

    将此管道配置添加到 jenkins 上的 node.js 项目以使其运行。

    pipeline {
        agent {
            docker {
                image 'node:6-alpine'
                args '-p 3000:3000'
            }
        }
        environment {
            CI = 'true' 
        }
        stages {
            stage('Build') {
                steps {
                    sh 'npm install'
                }
            }
            stage('Test') { 
                steps {
                    sh './jenkins/scripts/test.sh' 
                }
            }
        }
    }
    

    如您所见,这运行了两个阶段,构建测试 应用程序。 npm是通过docker镜像node:6-alpine安装的。

    Jenkins 文档提供了通过 CI 构建 nodejs 应用的完整教程:https://jenkins.io/doc/tutorials/build-a-node-js-and-react-app-with-npm/

    【讨论】:

    • 好的,我缺少的是选中此复选框:“将节点和 npm bin/ 文件夹提供给 PATH”。当我这样做时,shell 执行没有错误。
    • 我遇到了同样的问题,这个复选框也解决了我的问题!
    • @Theo,在作业配置的“构建环境”部分。见wiki.jenkins.io/display/JENKINS/NodeJS+Plugin
    • 我在作业配置中没有看到任何构建环境部分。我需要安装任何插件才能出现吗? @sasha_trn?
    • 我正在使用 jenkins 版本 2.131 btw
    【解决方案4】:

    如果您使用的是管道。

    1. 安装 NodeJS Jenkins 插件
    2. 在全局工具配置中配置节点安装 Example
    3. 当你想在你的管道中使用 npm 时:

      nodejs('<name of your Node installation>'){
      
         //here your npm commands p.e.
      
         npm install
         npm run prod
      }
      

    【讨论】:

      【解决方案5】:

      安装 NodeJS 后重启你的电脑,npm 将对 Jenkins 可见

      【讨论】:

      • 这帮我解决了这个问题,我刚刚重启了 Jenkis,然后它就开始工作了,没有任何问题。
      【解决方案6】:

      在管道场景中唯一对我有用的是添加

      tools {nodejs "你的节点 JS 安装名称"}

      安装 Node JS 插件并在 Manage Jenkins->Global Tool Configuration 菜单中添加新配置后。

      【讨论】:

        【解决方案7】:

        首先,进入Manage Jenkins/全局工具配置,如下配置nodejs安装器。

        现在转到 Jenkinsfile 并包含上述工具。

        tools {nodejs "NODEJS"}  //name should be similar to name used for installer in the global tool configuration.
        

        这对我有用。

        【讨论】:

          【解决方案8】:

          使用 nvm 安装 Node.js

          curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash
          
          . ~/.nvm/nvm.sh
          
          nvm install 4.4.5
          
          node -v //4.4.5
          

          另外,在je​​nkins中,管理Jenkins>>全局工具配置>> Nodejs安装

          【讨论】:

            猜你喜欢
            • 2012-09-30
            • 2014-07-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-24
            相关资源
            最近更新 更多