【问题标题】:jenkins on Mac, PATH is not set right, no /usr/local/binMac 上的 jenkins,PATH 设置不正确,没有 /usr/local/bin
【发布时间】:2013-03-15 06:18:10
【问题描述】:

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

我可以从终端成功地克隆一个 hg 存储库。但是,如果我尝试在 Jenkins 的工作中做同样的事情,它就会失败。

所以,在工作中,我告诉 Jenkins 运行一个 shell 脚本 echo $PATH。果然没有/usr/local/bin这个路径。如果我从终端执行相同的命令,它就在那里。

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

请注意,Jenkins 是从我登录的同一用户帐户运行这些测试的,所以我无法理解为什么会发生这种情况。

【问题讨论】:

  • 另外,我正在使用 launchd 从我的帐户运行 jenkins。因此,每当我的帐户“登录”时,它就会启动 Jenkins。
  • +1,我以为我失去了理智,很高兴不仅仅是我。这在旧版本中从来没有发生过,它是一个新的“功能”吗??

标签: macos jenkins homebrew launchd


【解决方案1】:

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

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

这应该将 PATH 设置为您需要的任何内容。

【讨论】:

  • 值可以是“$PATH:/my/other/path”吗?我需要附加到路径。
  • 我不这么认为。据我所知,$PATH 解释是由 shell 完成的,但是对于这种设置方法,它不会运行,所以你需要在这里给出一个完整的路径列表。
  • 我在 OSX 10.10 上为 Jenkins slave 尝试了这个,但无论出于何种原因,PATH 都不会改变。我可以设置其他变量……但不能设置 PATH。最终,我只是在 Jenkins 节点配置中将 PATH 设置为环境变量。
  • 执行brew services restart jenkins后,配置会被重置。
  • @gagarine 您可以将其插入到根级别 &lt;plist ...&gt;&lt;dict&gt; 标记内。一个很好的例子在这里:serverfault.com/a/128693/1687
【解决方案2】:

由于某种原因,Jenkins 在连接到从站时不会将 /usr/local/bin 保留在 PATH 中。
您可以通过

将其添加到PATH
  • 在节点配置上添加环境变量,或者

  • 在用户文件夹中添加一个 .bashrc 文件

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

注意:Mac客户端必须断开连接,然后在编辑~/.bashrc后通过Jenkins web app重新连接

【讨论】:

  • 编辑 .bashrc 文件似乎对我不起作用。
  • 但是,在节点上为 jenkins 用户编辑 .bash_profile 可以让路径在 Jenkinsfile 的 sh 块中可见
  • 我总共花了 3 天时间,最后这奏效了,并帮助我将我的 jenkins 工作从 windows(master) 运行到 macos(slave)。非常感谢。
【解决方案3】:

您可以在 launchd.conf 文件中设置 PATH。有关详细信息,请参阅here。请注意,man launchctl 表示“命令可以存储在 $HOME/.launchd.conf 或 /etc/launchd.conf 中,以便在启动时读取”,因此您可能可以在您的主目录并使用此文件链接中的说明。但据我所知,在launchd.conf 文件中你不能将目录添加到PATH,你可以重写PATH。
您还可以使用 /etc/paths.d 目录查看here 的解决方案

【讨论】:

【解决方案4】:

我发现即使为节点设置 PATH 环境变量也不适用于 hombrew Mercurial 安装。将设置路径,但仅适用于脚本构建阶段,而不适用于 VCS 签出阶段。这就是我最终要做的事情。

  1. 进入Manage Jenkins -&gt; Configure System
  2. 添加新的 Mercurial 安装
  3. 随意命名(我命名为 build-mac)
  4. 对于Installation Directory 我把/usr/local
  5. Executable 参数被预先设置为INSTALLATION/bin/hg,所以我就留在那里了。
  6. 此处的其他所有内容都可以留空
  7. 进入您的工作并编辑配置
  8. Source Code Management 下将 Mercurial Version 设置为您刚刚添加的 mercurial 安装。
  9. 保存
  10. $$$

希望能帮助遇到同样问题的其他人,因为我们不再被允许(默认情况下)在/usr/bin 内做任何事情。以前我只会在此处对 hg 进行符号链接,但现在有了新的“系统完整性保护”“功能”,这不再是微不足道的任务,如果你的 Mac 从属机是无头的,那就更难了。

【讨论】:

    【解决方案5】:

    在下面的 PATH 修改中,= 两边都不能有空格: PATH="/usr/local/bin:$PATH"

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

    【讨论】:

    • 在预构建步骤中添加 PATH="/usr/local/bin:$PATH" 对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多