устройство ожидания adb для устройства не работает в задании jenkins, но работает в сеансе s sh - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть мини-компьютер 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 * Заранее спасибо!
...