【发布时间】:2018-06-06 21:18:18
【问题描述】:
我无法让 Jenkins 使用“执行 shell”(在“构建”步骤下)中的“npm”命令。
我正在尝试设置一个新的 Jenkins 实例(前一个实例的副本)。我刚刚导入了旧作业,现在正在安装这些作业所依赖的各种服务(例如 maven、nodejs、ansible 等)。
我在设置 nodejs 和 npm 时遇到问题,尤其是设置。
当我在命令行输入命令“npm install”时,我得到以下信息:
uws@9.14.0 install /var/lib/jenkins/workspace . . .
. . .
Binary is fine
added 1282 packages in 36.424s
当我尝试使用 Jenkins 执行 shell 运行相同的命令时,我得到以下信息:
+ npm install
/tmp/jenkins7750702649955218109.sh: line 2: npm: command not found
Build step 'Execute shell' marked build as failure
为什么我可以从命令行访问这个命令,但 Jenkins 不能?
我检查过的一些事情:
-“node”和“npm”的路径都在路径上。路径上至少有“捷径”(这在之前的 Jenkins 实例中有效)。
-node 和 npm 二进制文件拥有 root:root 所有权,但它们的安全设置(当前)为 755(或 -rwxr-xr-x)。
-我已经安装了 nodejs 插件。不确定如何使用它,但它的设置与以前的 Jenkins 实例上的设置相匹配。两个实例都使用执行 shell(相对于任何特殊的 Jenkins 工具)来运行“npm”命令,而只有旧版本可以工作。
那么,我还应该检查什么我不是? Jenkins 需要什么才能访问“npm”命令?
【问题讨论】:
-
你能在 jenkins 可执行 shell 中运行 PATH 命令并确认其中是否存在 npm 吗??
-
所以,这里是该测试的结果: + echo /sbin:/usr/sbin:/bin:/usr/bin /sbin:/usr/sbin:/bin:/usr/bin . . .更多内容将在以后的编辑中提供。
-
好主意。我很尴尬,我没有考虑过这个测试。因此,这里是该测试的结果: + echo /sbin:/usr/sbin:/bin:/usr/bin /sbin:/usr/sbin:/bin:/usr/bin 这与命令行不同:/ usr/local/src/apache-maven/bin:/usr/local/sbin: /usr/local/bin:/usr/sbin:/usr/bin:/root/bin 检查/usr/local/bin的内容,我看到“node”可执行文件和“npm”可执行文件的快捷方式。在 Jenkins 生成的版本中看不到可执行文件,但可能需要仔细检查。知道为什么会存在这种差异吗?