在Mac上使用Jenkins,路径设置不正确,没有/usr/local/bin。

44

我最近使用Homebrew安装了Jenkins,也用Homebrew安装了Mercurial。

我可以成功地从终端克隆hg repo -。 但是,如果我尝试在Jenkins的作业中执行相同的操作,它会失败。

因此,在我的作业中,我告诉Jenkins运行一个shell脚本echo $PATH。毫无疑问,路径/usr/local/bin不存在。如果我从终端执行相同的命令,它是存在的。

那么,修改PATH的最佳方法是什么,以便当我从终端回显时,Jenkins正在提取与我相同的PATH?

请注意,Jenkins正在以我登录并进行这些测试的相同用户帐户运行,因此我无法想象为什么会发生这种情况。


另外,我正在使用launchd从我的账户运行Jenkins。因此,每当我的账户“登录”时,它就会启动Jenkins。 - Dan Morrow
2
+1,我还以为自己犯了错,很高兴不只有我这样。在旧版本中从未出现过这种情况,这是一个新的“特性”吗? - funkybro
6个回答

23

在 Jenkins 的 launchd .plist 文件中,您可以使用以下方式设置 PATH 环境变量:

<key>EnvironmentVariables</key>
<dict>
    <key>PATH</key>
    <string>(insert your path value here)</string>
</dict>

那应该能将路径设置为你需要的任何路径。


2
这个值可以是"$PATH:/my/other/path"吗?我需要将其附加到路径中。 - Dan Morrow
基本上在 plist 的顶层。如果您不知道文件的格式,可以从终端运行“man plist”查看详细信息,但基本上它在键和值之间交替。 - gaige
2
我在OSX 10.10上尝试了这个Jenkins从机,但出于某种原因,PATH不会改变。我可以设置其他变量...但不能设置PATH。最终,我只是在Jenkins节点配置中将PATH设置为环境变量。 - cgmb
2
执行 brew services restart jenkins 后,配置将被重置。 - AechoLiu
2
@gagarine 你需要将这个代码段插入到根级别的<plist ...><dict>标签内。这里有一个很好的例子:http://serverfault.com/a/128693/1687 - Kip
显示剩余5条评论

14

由于某种原因,当连接到从节点时,Jenkins不会将/usr/local/bin添加到PATH中。
您可以通过以下两种方法之一将其添加到PATH:

  • 在节点配置中添加环境变量,或

  • 在用户文件夹中添加.bashrc文件,其中包含

     PATH="/usr/local/bin:${PATH}"
    

注意:编辑 ~/.bashrc 后,Mac 客户端必须通过 Jenkins Web 应用程序断开连接,然后重新连接。


编辑 .bashrc 文件对我似乎没起作用。 - jxramos
然而,在节点上为Jenkins用户编辑.bash_profile可以解决在Jenkinsfile的sh块中使路径可见的问题。 - jxramos
我总共花了3天时间,最终成功了,这帮助我从Windows(主机)运行我的Jenkins作业到macOS(从机)。非常感谢。 - Pankaj Parkar

4
我发现即使为node设置了PATH环境变量,Homebrew安装的Mercurial仍然无法工作。路径会被设置,但仅适用于脚本构建阶段,而不是VCS检出阶段。以下是我最终采取的做法。
  1. 进入“管理Jenkins->配置系统”
  2. 添加新的Mercurial安装
  3. 随意命名(我命名为build-mac)
  4. 对于“安装目录”,我放置了“/usr/local”
  5. “可执行文件”参数预设为“INSTALLATION/bin/hg”,所以我保持不变。
  6. 这里的其他所有内容都可以留空
  7. 进入您的作业并编辑配置
  8. 在“源代码管理”下将“Mercurial版本”设置为您刚添加的Mercurial安装。
  9. 保存
  10. $$$
希望这能帮助遇到同样问题的任何人,因为我们现在(默认情况下)不允许在“/usr/bin”中执行任何操作。之前我只需在那里创建符号链接,但现在随着新的“系统完整性保护”功能,这已经不再是一项微不足道的任务了,如果您的Mac从机是无头的,则更加困难。

3
您可以在launchd.conf文件中设置PATH。有关详细信息,请参见这里。请注意,man launchctl指出,“可以将命令存储在$HOME/.launchd.conf或/etc/launchd.conf中以在launchd启动时读取”,因此您可能可以在您的主目录中创建“.launchd.conf”文件并使用该链接中的说明。但据我所知,在launchd.conf文件中,您无法添加路径,只能重写PATH。
您还可以在这里查看使用/etc/paths.d目录的解决方案。

据说自OSX 10.10起,/etc/launchd.conf已经被弃用。参见:https://dev59.com/cV8e5IYBdhLWcg3wwMv8#26311753 - cgmb

3

以下是PATH修改中=两侧不应有空格的正确格式:

PATH="/usr/local/bin:$PATH"

我将其添加到安装在macOS上的Jenkins的预构建步骤中。


PATH="/usr/local/bin:$PATH"添加到预构建步骤中对我很有效。 - Gandalf458

3

管理Jenkins -> 配置系统 -> 环境变量 -> 添加

  • 名称 = PATH+EXTRA
  • 值 = /usr/local/bin

enter image description here


这绝对是太棒了,对我来说易如反掌,毫无问题!这个在哪里有记录呢?我找不到任何相关信息,但它却像魔法一样奏效。我曾经为此苦苦挣扎,而这个解决方案却与众不同。由于我几乎每周都会升级Jenkins,所以我一直犹豫是否要在macOS或Homebrew层面进行任何修改。你是怎么发现这个的?很高兴发现Jenkins有这种“秘密菜单”配置! :D - Michael J

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