Jenkins NodeJS插件报错:找不到node命令

5
构建 shell 是:
echo $PATH
which node
ls -l /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node_6.10.2/bin
node -v

结果是:
/var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node_6.10.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin
/var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node_6.10.2/bin/node
-rwxrwxr-x 1 jenkins jenkins 30503659 Apr  4 09:01 node
lrwxrwxrwx 1 jenkins jenkins       38 Apr  9 13:09 npm -> ../lib/node_modules/npm/bin/npm-cli.js
/tmp/hudson8026342196338345661.sh: line 1: node: not found

为什么找不到node命令?
我正在使用官方的Jenkins Docker镜像运行它。
编辑:jenkins:2.46.1-alpine
2个回答

6
问题JENKINS-34815(NodeJS插件无法安装全局NPM软件包)中所建议的,检查ldd -l /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node_6.10.2/bin/node
请参见此评论

使用当前的docker jenkins:2.32.1-alpine和插件nodejs:1.0时,当使用node 7.4时,会再次发生这种情况:
即使在PATH中找到并且可执行,Alpine也无法运行二进制文件:

+ /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs7/bin/node -v

/var/jenkins_home/jobs/busx1/workspace@tmp/durable-a76d6fd5/script.sh: line 1: /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs7/bin/node: not found

这是因为该图像不包含nodejs所需的libstdc++.so.6文件。
    /lib64/ld-linux-x86-64.so.2 (0x55ae0ad53000)
    libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x55ae0ad53000)
    librt.so.1 => /lib64/ld-linux-x86-64.so.2 (0x55ae0ad53000)

Error loading shared library libstdc++.so.6: No such file or directory (needed by /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs7/bin/node)
    libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x55ae0ad53000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f0ac773e000)
    libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x55ae0ad53000)
    libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x55ae0ad53000)

换句话说,node: not found并不意味着未安装node(实际上已经安装,在$PATH中也可以找到可执行文件)。 这意味着其中一个node的依赖项没有被找到。

我应该不使用alpine,还是自己安装libstdc++.so.6呢? - hbrls
@hbrls Jenkins镜像已经基于Alpine构建。我想说的是,你的镜像可能缺少一些元素。使用ldd -l命令可以告诉你缺少哪些元素。如果你发现确实缺少了某些元素,那么你需要基于现有的jenkins:2.46.1-alpine镜像构建自己的镜像,并添加缺失的元素。 - VonC
那么这里的解决方案是什么?如何在alpine中修复“节点未找到”的问题? 我正在使用Jenkins ver. 2.176.1 alpine,我也遇到了同样的问题。 - Jerald Sabu M
@JeraldSabuM 我不完全记得,但我猜测添加缺失的依赖项就足够了。 - VonC
@VonC 我怎么知道要安装哪个依赖项?(ldd -l 报错) :::---11:56:21 + ldd -l /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/NodeJS_10.19.0/bin/node 11:56:21 ldd:无法加载-l:没有那个文件或目录 - Jerald Sabu M
显示剩余3条评论

1
我使用docker镜像jenkins:2.60.3-alpine来运行Jenkins。
为了解决问题,我进入容器直接安装node:
你可以使用以下命令查找容器名称:
$ docker container ls

请用真实的容器名称替换 with。
$ docker exec -u 0 -it <container_name> bash

bash-4.3# apk add --no-cache nodejs
bash-4.3# node --version
v6.9.5
bash-4.3# npm --version
5.6.0

最后,该工作需要使用node和npm两者。

这并没有回答问题。问题出在alpine和Jenkins nodejs插件上。直接在alpine docker中安装nodejs是没有问题的。 - Jerald Sabu M
针对Alpine版本的Docker,您应该使用apk-get,但如果基于Ubuntu,则应使用apt-get来处理Debian基础。 - uzay95

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