
云手机ADB直连实战,星界云手机零配置接入CI流水线
“云真机+CI”早已不是新鲜词,但能把 ADB 调试做成“零配置”的,国内目前只有星界云手机。上周,某头部社交 App 把 nightly 构建从 30 台实体机柜整体迁移到云端,结果打包、安装、Monkey、日志归档 4 个环节全部无人值守,回归耗时从 3.5 小时压缩到 28 分钟。秘诀只有一句话:让 ADB over IP 像本地 USB 一样听话。下面把完整踩坑笔记公开,任何团队 10 分钟就能复制。
一、ADB over IP 安全白名单机制:把“端口裸奔”变成“带钥匙的快递柜”
传统云真机为了图省事,5555 端口直接映射 0.0.0.0,结果被扫描到就是“肉鸡”。星界云手机把“IP 白名单”做成账户级策略:同一数据中心所有设备共享一条规则,子账号无权修改,只能找主账号审批。
1. 打开 星界云手机控制台 → 云手机列表 → 更多 → ADB 连接 → 填写本机公网 IP(访问 ip138 可查)。
2. 开启后系统返回一个域名+端口,例如 adb-7f8c.starphone.com:31527,这条地址 7 天内有效,到期自动回收,杜绝“遗忘端口”风险。
3. 白名单支持 CIDR,一次可写 10.0.0.0/8,方便 GitLab Runner 集群动态扩缩。
二、Jenkins/GitLab Runner 脚本示例:一条 Pipeline 管 200 台云手机
下面给出 Jenkins Declarative 与 GitLab shell 双版本,直接拷走就能跑。核心思路:把“连接地址”当参数传进去,做到“谁构建、谁连接、谁释放”。
Jenkinsfile(Declarative)
pipeline {
agent any
parameters {
string(name: 'PKG_URL', defaultValue: 'https://your.repo/app-debug.apk', description: '测试包下载地址')
text(name: 'DEVICE_LIST', defaultValue: 'adb-7f8c.starphone.com:31527\nadb-9d2a.starphone.com:31528', description: '每行一个ADB地址')
}
stages {
stage('Install & Test') {
steps {
script {
def devices = params.DEVICE_LIST.split('\n')
parallel devices.collectEntries { addr ->
["Test on ${addr}" : {
sh """
adb connect ${addr}
adb -s ${addr} install -r \$(curl -sL ${params.PKG_URL} -o app.apk && realpath app.apk)
adb -s ${addr} shell am instrument -w -r -e debug false -e class com.xxx.SmokeTest#run com.xxx.test/androidx.test.runner.AndroidJUnitRunner | tee result-${addr}.txt
adb -s ${addr} logcat -d > logcat-${addr}.txt
adb disconnect ${addr}
"""
}]
}
}
}
}
}
post {
always {
archiveArtifacts artifacts: '*.txt', fingerprint: true
}
}
}
GitLab Runner(shell)
#!/bin/bash
set -ex
for addr in $(cat devices.txt); do
adb connect $addr
adb -s $addr install -r app.apk
adb -s $addr shell monkey -p com.xxx 5000 > monkey-$addr.log
adb -s $addr logcat -d > logcat-$addr.log
adb disconnect $addr
done
把 devices.txt 做成 CI 变量,Runner 自动并发,200 台手机 5 分钟跑完回归。
三、批量安装测试包与日志抓取:让“拉数据”不再人肉
星界云手机默认内置 /sdcard/0log 目录,日志统一落盘。CI 脚本里加两行就能秒级拉回:
adb -s $addr shell "tar -czf /sdcard/0log/logs.tgz /sdcard/0log"
adb -s $addr pull /sdcard/0log/logs.tgz ./artifact/$addr-log.tgz
结合 Jenkins Plot 插件,可直接把 ANR、Crash 次数生成趋势图,第二天早会打开就能“甩锅”。
四、双网络模式映射公网调试端口:直播、支付、风控全场景通吃
星界云手机提供“公共网络”和“专属网络”两种模式:
- 公共网络:默认 NAT,适合普通 App 测试,开箱即用。
- 专属网络:独立 VPC,支持端口映射,可把 5555 映射成 31527、31528… 等任意公网端口,且源地址受白名单限制。
| 场景 | 推荐网络 | 端口映射策略 | 额外收益 |
|---|---|---|---|
| 常规自动化测试 | 公共网络 | 系统随机分配 | 零配置、即开即连 |
| 支付 SDK 白盒审计 | 专属网络 | 固定 31527-31530 | 安全组隔离,满足金融合规 |
| 直播连麦压测 | 专属网络 | 端口段 32000-32100 | 上下行 50 Mbps 保证,延迟 30 ms |
切换网络只需 5 秒,无需重启手机,CI 流水线里用 OpenAPI 一键调用即可。
五、成本速算:实体机柜 vs 星界云手机
以 100 台 Android 11 真机、每天跑 8 小时为例:
| 项目 | 实体机柜 | 星界云手机(畅玩版) |
|---|---|---|
| 一次性采购 | 100×1500 = 15 万 | 0 元 |
| 机房/电/网 | 约 3000 元/月 | 0 元 |
| 运维人力 | 1 人 8000 元/月 | 0 人 |
| 租赁费用 | 0 元 | 100×38 = 3800 元/月 |
| 每月合计 | ≈ 11000 元 | 3800 元 |
一年省 8 万,还能随时升降配置,新品上市当天就能扩容到 1000 台。
六、如何开跑?
1. 打开 星界云手机官网 注册账户,联系客服领取 1 天试用券。
2. 控制台勾选“畅玩版”→ 更多 → 开启 ADB → 填入本机 IP → 拿到连接地址。
3. 把上面 Jenkinsfile 或 GitLab 脚本塞进仓库,Push 即触发。
4. 第二天上班打开测试报告,红绿条一目了然。
当同行还在机柜里拔插 USB 时,你的 nightly 构建已经在云端跑完了第三轮回归。云手机不是未来,它就是此刻的提效神器。
