我有一台运行 macOS Catalina OS 的 Mac mini 计算机,它是一个运行声明性管道的 Jenkins 从站。
如果我连接到 ssh 并使用以下命令运行模拟器:
emulator -avd Pixel_2_API_28_-_Android_9 -wipe-data -no-snapshot &
然后等待它准备好使用以下命令:
adb wait-for-device -s emulator-5554 shell 'while [[-z $(getprop sys.boot_completed) ]]; do sleep 1; done;'
一切正常,几秒钟后我得到命令提示符,我可以在本地运行 appium 测试。
问题出现了,当我在我的声明性管道中运行这个相同的命令(以及我发现在这里和其他地方挖掘的许多类似的命令,你可以在下面看到注释掉)作为 jenkins 作业时。
相同的“adb wait-for-device”命令会挂起,直到作业达到其 120 分钟超时限制。
我尝试了以下方法,这是我的“等待启动模拟器”管道阶段(“DEVICEID”变量是我从另一个工作中获得的参数)
stage('Waiting start emulator') {
steps {
//sh '''
// adb -s ''' + DEVICEID + ''' reboot
//'''
sh '''
#!/bin/bash
#adb wait-for-device -s ''' + DEVICEID + ''' shell 'while [[-z $(getprop sys.boot_completed) ]]; do sleep 1; done;'
gtimeout 600 adb wait-for-device -s ''' + DEVICEID + ''' shell 'while [[-z $(getprop dev.bootcomplete) ]]; do sleep 1; done;'
#adb wait-for-device -s ''' + DEVICEID + ''' shell 'while [[-z $(getprop dev.bootcomplete) ]]; do sleep 1; done;'
'''
/*sh '''
#!/bin/bash
#adb wait-for-device
A=$(adb -s ''' + DEVICEID + ''' shell getprop sys.boot_completed | tr -d '\r')
while [ "$A" != "1" ]; do
sleep 2
A=$(adb -s ''' + DEVICEID + ''' shell getprop sys.boot_completed | tr -d '\r')
done
#adb shell wm dismiss-keyguard
#adb -s ''' + DEVICEID + ''' shell input keyevent 82
'''*/
/*sh '''
#!/bin/bash
#adb wait-for-device
#while [ "`adb -s ''' + DEVICEID + ''' shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done
#adb shell wm dismiss-keyguard
#adb -s ''' + DEVICEID + ''' shell input keyevent 82
'''*/
//sh '''sleep 30'''
}
}
这是启动模拟器部分:
stage('Run Emulator') {
steps {
sh '''
#!/usr/bin/env bash
# Start adb daemon
adb start-server
# Start android emulator
emulator -avd ''' + AVDEMULATOR + ''' -wipe-data -no-snapshot &
'''
}
}
还有其他我还没有找到的方法吗?
提前致谢!