MacOS Jenkins主节点执行adb命令报错:找不到adb(已配置环境变量)
我在处理MacOS上Jenkins执行adb的问题时遇到过不少类似的情况,结合你已经做的操作,咱们从几个关键方向排查:
1. 先确认adb的绝对路径是否有效
首先在你的终端里执行which adb,得到类似/Users/displayride/Library/Android/sdk/platform-tools/adb的路径。先验证这个路径是否真的存在:ls -l /Users/displayride/Library/Android/sdk/platform-tools/adb,确保文件存在且有可执行权限(权限位应该包含x)。
如果路径没问题,先试试在Jenkins任务里直接用绝对路径执行adb命令,比如:
/Users/displayride/Library/Android/sdk/platform-tools/adb devices
这能先排除环境变量的干扰,确认adb本身是可以被Jenkins访问的。
2. 检查Jenkins使用的Shell环境
MacOS现在默认Shell是zsh,但你配置的是.bashrc——如果Jenkins用的是zsh,那.bashrc不会被加载。先在Jenkins任务里加一步:
echo $SHELL
执行后看输出是/bin/bash还是/bin/zsh:
- 如果是zsh,把adb路径加到
/Users/displayride/.zshrc里,然后在任务中执行source /Users/displayride/.zshrc && adb devices - 另外要注意:Jenkins执行的是非登录、非交互式Shell,
.bashrc/.zshrc这类文件默认不会被自动加载。你可以把adb路径加到/Users/displayride/.profile或者/etc/profile里,这两个文件在非交互式Shell下也会被加载。
3. 修正Jenkins启动时的环境变量(针对LaunchDaemon安装的Jenkins)
如果你的Jenkins是通过官方pkg安装的,它会以LaunchDaemon的方式运行,默认不会加载普通用户的Shell配置。这种情况下需要修改Jenkins的启动plist文件:
- 找到plist文件:通常是
/Library/LaunchDaemons/org.jenkins-ci.plist - 编辑文件(需要sudo权限),在
<dict>节点内添加环境变量配置:
<key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/bin:/bin:/usr/sbin:/sbin:/Users/displayride/Library/Android/sdk/platform-tools</string> </dict>
- 重启Jenkins生效:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
如果是brew安装的Jenkins,plist路径通常是~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist,修改对应文件即可。
4. 正确使用Environment Injector Plugin
如果你用这个插件,直接在任务的"Inject environment variables"配置里添加PATH的扩展:
- 选择"Properties Content",输入:
PATH=$PATH:/Users/displayride/Library/Android/sdk/platform-tools
或者直接定义ADB的路径变量:
ADB_PATH=/Users/displayride/Library/Android/sdk/platform-tools
然后在执行命令时用${ADB_PATH}/adb devices。
每次修改配置后,记得重启Jenkins或者重新加载任务配置,确保环境变量生效。另外也要检查Jenkins运行用户对adb路径的访问权限,避免出现权限不足的问题。
内容的提问来源于stack exchange,提问作者Bill B

