公告资讯

热门消息 > ADB白名单直连实践,星界云手机集成CI/CD

ADB白名单直连实践,星界云手机集成CI/CD

2026-04-14

ADB白名单直连实践:星界云手机集成CI/CD,让测试流水线飞起来

背景

“DevOps 已死,平台工程永生”——这句话在 2023 年 Gartner 十大战略技术趋势里被反复引用。当移动端发版频率从“双周”被压缩到“天级”,传统真机机房却因 ROOT 权限、USB 拔插、IP 漂移等问题,成了 CI/CD 最薄弱的环节。某头部社交 App 最近一次线上事故复盘显示:灰度包在 200 台真机里跑了 6 小时,日志只回传了 47%,导致回滚决策延迟 32 分钟,直接损失超 300 万。如何既保留 ADB 调试的灵活性,又把“真机”搬进流水线?星界云手机用一条“白名单+TCP 通道”给出了答案。


1. ADB over TCP 安全通道:0 布线,0 USB,全程加密

星界云手机默认关闭 ADB,只有在控制台主动开启才会监听 5555 端口,且强制走 TLS 1.3 加密。
开启流程:
1. 登录控制台 → 选中云手机 → 更多操作 → ADB 连接 → 填写本地公网 IP(访问 ip138 即可查看)→ 确定。
2. 系统秒级签发 adb connect <云手机IP>:5555 地址,单次授权 24h 内有效,过期自动回收。
3. 本地只需执行
bash adb connect 10.255.x.x:5555 adb devices
即可看到设备上线,无需 ROOT、无需 USB 布线,防火墙仅放行白名单 IP,杜绝扫描风险。


2. IP 白名单动态签发:子账号也能“无感”接入

很多公司采用“主账号采购+子账号使用”模式,星界把白名单做成“数据中心级”策略:主账号一次录入,同一 DC 内全部云手机共享,子账号在 Jenkins 流水线里调用 OpenAPI 即可自动开启 ADB,无需再填 IP。
示例代码(Groovy):

// Jenkinsfile 片段
stage('启用云手机ADB') {
  steps {
    script {
      def ip = sh(script: 'curl -s ip138.com/plain', returnStdout: true).trim()
      chinacOpenAPI.enableADB(dataCenterId: 'dc-bj02', whiteIP: ip)
    }
  }
}

白名单支持最大 50 条,并可设置“跟随节点”:当构建节点是动态 Pod,IP 变化时调用 API 自动替换,实现“随用随开,随走随关”。


3. Jenkins 自动打包推送:从源码到云手机 3 分钟

传统流程:编译→人工扫码→装到真机→跑 Monkey。
星界流程:编译→Gradle 触发→ADB 装包→云手机并行跑 200 台。
核心脚本(Pipeline):

stage('并行安装并跑测') {
  steps {
    script {
      def phones = chinacOpenAPI.listADBPhones()
      def splits = phones.collate(20) // 每 20 台一批
      splits.each { batch ->
        parallel batch.collectEntries { p ->
          ["${p.name}": {
            sh """
              adb connect ${p.adbAddr}
              adb -s ${p.adbAddr} install -r app-debug.apk
              adb -s ${p.adbAddr} shell am instrument -w com.demo.test/androidx.test.runner.AndroidJUnitRunner
            """
          }]
        }
      }
    }
  }
}

得益于星界 BGP 内网,上传速度稳定在 50 MB/s,200 台云手机 3 分钟全部装完,测试报告自动回传到 Jenkins 归档目录。


4. 免 ROOT 调试与日志收集:像本地一样“翻 logcat”

星界云手机提供“ROOT 开关”,但默认关闭以满足金融、政务类合规要求。
无需 ROOT 即可:
- adb logcat -c && adb logcat -v threadtime > case.log
- adb shell am start -W 获取启动耗时
- adb shell cmd package dump com.xxx 查看内存详情
若需要更深层次的 trace,可在控制台一键开启 ROOT,30 秒后生效,用完即关,避免残留风险。
日志收集 Tip:
在 Pipeline 末尾加一行 adb pull /sdcard/Android/data/<包>/files/trace.zip .,即可把崩溃堆栈、Hprof、ANR trace 一并拉回 Jenkins,无需找运维要真机。


5. 灰度发布回滚一站式方案:分钟级“刹车”

星界云手机与自建 Kubernetes 灰度环境打通,形成“云手机+容器”双轨发布:
1. 新业务容器灰度 5% 用户流量。
2. 同版本 APK 推送到 50 台云手机,跑 15 分钟 Monkey + 业务埋点验证。
3. 若崩溃率 > 0.3% 或 ANR > 0.1%,自动触发回滚:
- Jenkins 调用星界 API,对 50 台云手机执行 adb shell pm install-existing -r com.demo 回退到上一版;
- 同时 K8s 通过 Argo Rollouts 全量切回旧版本。
全程无需人工介入,平均回滚时长 2 分 17 秒,比传统真机方案快 4 倍。


成本对比:云手机 vs 自购真机

项目 自购真机(200台) 星界云手机(200台,畅玩版)
一次性硬件成本 约 120 万元 0 元
月均折旧+电费 约 2.4 万元 38×200=0.76 万元
ROOT/刷机人力 2 人/月 0
扩容周期 15 天 5 分钟

小结

从“USB 拔插”到“TCP 直连”,从“固定机房”到“弹性云手机”,星界把 ADB 调试、灰度验证、日志回捞、回滚策略全部封装成可编程接口,真正让移动端 CI/CD 像后端一样丝滑。
想亲自体验这条流水线?现在点击这里进入官网,注册后联系客服即可领取 1 天免费试用,把 200 台云手机搬进你的 Jenkins,让下一次发版不再熬夜。