Jenkins无法找到npm。

26

在这个 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

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

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甚至node。我该如何让Jenkins知道npm/node的位置?我尝试在shell中先写入以下内容:

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

但仍然没有成功。


Jenkins启动一个新的shell... - Malice
所以你可能想要在Jenkins脚本内部更新PATh。 - Malice
是的,我在Jenkins的shell中更新了路径,但仍然没有运气。 - oderfla
1
我使用了这个教程(仅限开头部分)。 - Yuri Aps
10个回答

26

我已经困扰了一段时间,终于找到了解决方案。从“作业”菜单中选择 Configure,在“构建环境”下选择 提供 Node & npm bin/ 文件夹到 PATH。您可以保留默认设置,然后就可以开始使用了。

输入图片描述

正如Eric Wang 在评论中指出的那样,需要先安装 NodeJS 插件 才能出现这个选项: https://wiki.jenkins.io/display/JENKINS/NodeJS+Plugin


1
似乎需要先安装“node插件”,才能获得这个选项。 - Eric
1
安装了Node插件并提供了构建环境后,一切都正常工作了。谢谢。 - Ugur Kazdal
1
我安装了NodeJS插件,但是我没有构建环境部分,我需要其他东西才能看到吗? - ocramot
@ocramot,你能找到解决方法吗? - user805981
@user805981 我使用了下面DenLilleMand的解决方案。 - ocramot
显示剩余3条评论

18

这个帖子中的回答没有帮助我,真正帮助我的是将node.js工具添加到我的Jenkinsfile文件中:

pipeline {
  agent any

  tools {nodejs "nodejs"}

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

字符串"nodejs"是你在全局工具配置中赋予node.js工具的名称


如何在脚本化流水线脚本中使用它 像这样使用它:env.GRADLE_USER_HOME = "${env.WORKSPACE}/.gradle" def nodejsTool = 'NodeJS-14.20.0' // env.JAVA_HOME="${tool 'jdk-1.8.0_321'}" env.PATH="${env.JAVA_HOME}/bin:${env.PATH}:${tool nodejsTool}"给我一个错误:script.sh: 第1行:node: 命令未找到 - undefined

12

只需安装jenkins的nodeJS插件,您可以在此处找到它。

安装插件后,重新启动jenkins并进入全局配置以指定版本。

有关配置的完整详细信息可在上面链接的插件文档中找到。


jenkins 2.x更新

要在jenkins 2.x中打开插件页面:

只需进入Jenkins环境的管理员即可使用管理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' 
            }
        }
    }
}

正如你所看到的,这个过程分为两个阶段,构建测试应用程序。通过docker镜像node:6-alpine安装了npm

Jenkins文档提供了一个完整的教程,介绍了如何通过CI构建Node.js应用程序:https://jenkins.io/doc/tutorials/build-a-node-js-and-react-app-with-npm/


2
好的,我之前漏掉了勾选这个复选框:“将Node和npm bin/文件夹提供给PATH”。当我勾选后,命令行就可以正常执行了,没有出现错误。 - oderfla
1
我之前也遇到了同样的问题,勾选这个复选框也解决了我的问题! - fuzzi
@Theo,在作业配置的“构建环境”部分。请参阅https://wiki.jenkins.io/display/JENKINS/NodeJS+Plugin。 - sasha_trn
1
我在我的工作配置中没有看到任何构建环境部分。我需要安装任何插件才能看到吗?@sasha_trn? - Theo
我顺便说一下,我正在使用 Jenkins 版本 2.131。 - Theo

6
如果你正在使用管道技术。
  1. Install the NodeJS Jenkins plugin
  2. Configure Node installation in the Global Tool Configurations Example
  3. Whenever you want to use npm in your pipeline use:

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

5

首先,进入管理Jenkins/全局工具配置,像下面这样配置nodejs安装程序。

enter image description here

现在进入Jenkinsfile并包含上述工具。

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

这对我有用。


这个选项不在“全局工具配置”下面...它在哪里? - Petro
@Petro 你需要在 https://your-jenkins-url/manage/configureTools/ 下点击 "添加 NodeJS"。 - Bohne

3

在管道方案中,唯一对我有效的是添加

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

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


1
安装完NodeJS后请重启电脑,这样Jenkins就能看到npm了。

部分地,这帮助我解决了问题,我只是重新启动了Jenkins,然后它开始正常工作了。 - Samaritan_Learner

0
使用此代码。
n=$(which node);
n=${n%/bin/node};
chmod -R 755 $n/bin/*;
sudo cp -r $n/{bin,lib,share} /usr/local

0

使用 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

另外,在 Jenkins 中,管理 Jenkins>>全局工具配置>>Node.js 安装。

-1
pipeline {
    agent any
    stages {
        stage("Install") {
            steps {
                sh "npm install"
            }
        }
        stage("Build") {
            steps {
                sh "npm run build"
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接