在 Jenkins 上针对同一路径执行不同的软件二进制文件

Different software binary being executed on Jenkins for the same path

我在我的 jenkins 服务器上的两个地方安装了 gems 二进制文件,每个都是不同的版本:

[myserver]$ /opt/chef/embedded/bin/gem --version
2.4.1
[myserver]$ /opt/chefdk/embedded/bin/gem --version
2.4.4

我正在 运行使用以下命令在此詹金斯服务器上工作:/opt/chefdk/embedded/bin/gem inabox

我收到一条错误消息:

ERROR:  While executing gem ... (Gem::CommandLineError)
    Unknown command inabox

然而,当我从命令行运行执行相同的命令时,它会识别 inabox 选项。

为了调试,当我从控制台和命令行 运行 此命令 /opt/chefdk/embedded/bin/gem help commands 时,可用的选项不同,控制台输出不包括 "inabox" 选项。

为了确保我使用了正确的二进制文件,我还在作业中导出了二进制路径:PATH=$PATH:/opt/chefdk/embedded/bin,但这也没有解决任何问题。 我怀疑由于某种原因, /opt/chef/embedded/bin/gem 二进制文件被执行而不是 /opt/chefdk/embedded/bin/gem ,但我不确定如何以及如何解决它。有什么指点吗?

EDIT1 这是 echo $PATH

的输出

这是我通过 Jenkins 控制台 运行 时命令的输出:/opt/chefdk/embedded/bin/gem help commands

这是我通过命令行 运行 时命令的输出:

1) 每次更改环境变量时重新启动 Jenkins

2) 如果 jenkins 在 slave 上执行代码,你需要在你的 Jenkins 设置中定义路径。

我们发现注入到 Jenkins 作业中的 GEM_PATH 变量导致 gem 命令无法按预期工作。为了解决这个问题,我们在构建步骤的 shell 部分的开头添加了“unset GEM_PATH”行。这允许 gem 命令再次识别“inabox”选项并成功上传 gems 到 Ruby Gems 服务器。