【发布时间】:2019-02-17 01:57:38
【问题描述】:
我有一个 VSTS/Azure DevOps 自托管代理在一台机器上作为服务运行,该机器通过 USB 连接了我想与 ADB 一起使用的 Android 设备。
在构建期间,命令行任务调用 ADB 命令。当有人登录机器时,我遇到了设备未经授权的问题。我观察到的情况是
- 在没有人登录机器的情况下,我插入 Android 设备并获得允许 USB 调试的提示并选中始终允许框并单击确定
- 构建运行正常,ADB 命令工作
- 一段时间后,有人登录到机器,设备对他们来说是未经授权的
- 在下一次构建期间发送 ADB 命令时,我再次使用不同的 RSA 密钥指纹得到提示
这似乎类似于RSA fingerprint change every time a new build is started,但他们的问题是针对 docker/gitlab-ci。
【问题讨论】:
-
虽然您的特定虚拟化平台可能不同(与您链接的问题中的平台不同),但问题的根本原因(非持久性用户主目录)仍然相同。
-
默认情况下,ADB 主机密钥是用户特定的。在您的设置中,您可能希望使用计算机专用密钥。这应该可以通过ADB_KEYS_PATH environment variable 实现。
-
看来我可以通过设置 ADB_VENDOR_KEYS 系统环境变量来让它工作,但只有在将它设置为文件而不是文件夹时。例如,
c:\adb_keys\adbkey有效,而不是c:\adb_keys,其中adbkey是键。我假设 ADB_KEYS_PATH 也可以,但是运行 adb 会显示一个环境变量列表,表明我们应该使用 ADB_VENDOR_KEYS。 -
有趣的是,当没有人登录并且未设置此环境变量时,我可以启用调试。我假设 adbkey 被放置在系统的某个地方,但我找不到它。
标签: android azure-devops azure-devops-self-hosted-agent