• Lockable Resources Plugin 可以解决你的问题。
    链接:https://wiki.jenkins-ci.org/display/JENKINS/Lockable+Resources+Plugin
    描述:This plugin allows to define lockable resources (such as printers, phones, computers, etc.) that can be used by builds. If a build requires an resource which is already locked, it will wait for the resource to be free. One can define a lock-priority globally and on a per-job basis.

    对于你机子上的 4 台 android 设备,可以手动把它们配置在 Lockable Resources 里。比如以设备序列号做为名字,Label 设定为你的资源池的名字 (比如 Nexus)。如果你想自动的把连接的设备配置进来,可以创建一个上游 job,根据 adb devices -l 的设备列表,更新 Jenkins 配置文件 org.jenkins.plugins.lockableresources.LockableResourcesManager.xml.

    <org.jenkins.plugins.lockableresources.LockableResource>
       <name>Serial Number 1</name>
       <description>Functional Testing</description>
       <labels>Google Nexus</labels>
     </org.jenkins.plugins.lockableresources.LockableResource>
    
    
  • 你提到的关键字有 不在本地跑 diff 自动触发。既然需要在远程执行,你肯定是要 commit 的对吧,总不能生成 patch 然后应用到远程服务器上触发测试。我们解决这类场景是:

    • Gerrit
    • Jenkins
    • Gerrit Trigger

    git commit/review 后, Jenkins job 按照 Gerrit event 触发执行,获取本次的代码变更。下游 job 可以执行测试集通知测试结果。

  • 建议你先查看 Build Console Output 的错误信息,才好分析解决。需要重点排查的配置是:

    • Source Code Management 部分的 Repository Url, Credentials
    • Credentials 对应的 Private Key, Passphrase 等