У меня есть мини-компьютер Ma c, работающий под управлением macOS Catalina OS, который является подчиненным Jenkins, использующим декларативные конвейеры.
Если я подключаюсь к s sh и запускаю эмулятор с командой:
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 &
'''
}
}
Есть ли другой метод, который я еще не нашел?
* 102 2 * Заранее спасибо!