使用VSTS Shell脚本CI任务时,如何生成后台进程

问题描述 投票:4回答:2

我正在尝试在CI过程中运行androidTests。我为此使用VSTS构建定义。在测试之前,我必须启动Android Emulator。我可以使用Shell脚本任务来启动模拟器,但由于我无法在后台启动该过程,因此构建流程无法继续下一步。我已经尝试了下面列出的所有可能性:

nohup $ANDROID_HOME/tools/emulator @emulatorForUITests
nohup $ANDROID_HOME/tools/emulator @emulatorForUITests &
$ANDROID_HOME/tools/emulator @emulatorForUITests &

但模拟器仍然在前台运行。我做错了什么还是VSTS安全功能?如何在后台启动模拟器?

更新(回答评论中的问题):

  • 在前台块中启动模拟器构建过程因此它必须是非阻塞(后台)任务。无论如何,模拟器在前台(在UI中)启动。如果我使用相同的脚本启动它,但直接从终端而不是VSTS启动它,模拟器启动,测试运行,一切正常
  • 我使用自己的代理(在macOS上)

UPDATE2:从VSTS构建日志:

(...)
2017-07-14T10:11:31.8195010Z emulator: WARNING: userdata partition is resized from 550 M to 800 M
2017-07-14T10:11:31.8202870Z 
2017-07-14T10:11:31.8217150Z Hax is enabled
2017-07-14T10:11:31.8230410Z Hax ram_size 0x40000000
2017-07-14T10:11:31.8246000Z HAX is working and emulator runs in fast virt mode.
2017-07-14T10:11:34.0594360Z coreaudio: Could not initialize record - Unknown Audiodevice
2017-07-14T10:11:34.0627730Z coreaudio: Could not initialize record - Unknown Audiodevice
2017-07-14T10:11:34.0649440Z audio: Failed to create voice `goldfish_audio_in'
2017-07-14T10:11:34.0671380Z qemu-system-i386: warning: opening audio input failed
2017-07-14T10:11:34.0875870Z coreaudio: Could not initialize record - Unknown Audiodevice
2017-07-14T10:11:34.0888750Z coreaudio: Could not initialize record - Unknown Audiodevice
2017-07-14T10:11:34.0902400Z audio: Failed to create voice `adc'
2017-07-14T10:11:34.5066290Z emulator: emulator window was out of view and was recentered
2017-07-14T10:11:34.5078580Z 

由于模拟器不是后台进程,因此VSTS等待emulator进程完成。

bash android-emulator continuous-integration azure-pipelines-build-task
2个回答
0
投票

如果使用&运行命令,则可以在后台启动模拟器,并将输出发送到/ dev / null。我们做了一些试验和错误,它只有在我们输出输出时才有效,我猜测bash任务不知道它应该完成否则。

这是我们为启动模拟器而运行的一行示例:

$ANDROID_HOME/tools/emulator -avd emulator &>/dev/null &

0
投票

我这样做了,它的工作原理

  1. 使用此工具https://filehippo.com/download_advanced_bat_to_exe_converter/或任何其他工具将批处理文件转换为exe,将下面的cmd和转换为exe,如“startavd.exe”所示

启动cmd / C“%ANDROID_HOME%/ emulator / emulator @vstsavd -wipe-data-no-boot-anim”

  1. 通过在Admin cmd中运行以下命令来创建Windows服务

sc create startavd binPath =“pathto startavd.exe”

  1. 使用此工具https://www.coretechnologies.com/products/ServiceSecurityEditor/为startavd服务提供服务帐户的开始访问权限
  2. 现在在Vsts构建任务中添加一个脚本任务,该任务在命令下执行

sc start startdav

而已..

即使脚本失败,avd也会在机器中启动,然后运行测试,最后杀死avd

  1. 添加一个执行以下命令的脚本任务

Taskkill / IM qemu-system-x86_64.exe / F.

© www.soinside.com 2019 - 2024. All rights reserved.