1

我有一台运行 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 &
        '''
    }
}

还有其他我还没有找到的方法吗?

提前致谢!

4

0 回答 0