Запуск тестов эмулятора на GitLab CI
Posted on 2021-02-24 by
GitLab CI (Continuous Integration) стал неотъемлемой частью процессов сообщества F-Droid. Это свободное программное обеспечение, построенное на открытых стандартах, и оно хорошо работает. Последний элемент, которого не хватает в нашей экосистеме тестирования, - это надежный способ запуска тестов в реальных эмуляторах Android. Благодаря усилиям многих людей, Google теперь действительно тестирует запуск эмуляторов Android в Docker. А недавние выпуски пакета эмуляторов SDK действительно работают без немедленного сбоя! Это самая многообещающая новость об использовании свободных программных эмуляторов для тестирования Android за долгое время. К сожалению, пока не все гладко, и чтобы заставить эмуляторы работать в GitLab CI, все еще требуется немного потанцевать с магическими заклинаниями (или с бубном). Наши требования таковы:
- Работает на стандартных общих раннерах (бегунах?) gitlab.com.
- Работает без KVM или каких-либо дополнительных привилегий.
- Использует KVM, когда это доступно.
То, что мы имеем сейчас, дает нам основу для создания нашего стандартного fdroidclient CI setup. Раньше мы были ограничены использованием старых эмуляторов armeabi-v7a, которые работают почти невообразимо медленно. Это были единственные системные образы эмуляторов, которые могли работать в Docker без поддержки KVM. Даже с поддержкой KVM эмулятор кажется довольно нестабильным. Это стало лучше, но все еще не там, где должно быть.
Хорошей новостью является то, что запуск эмулятора в Docker теперь достаточно стабилен, чтобы люди действительно создавали вещи на его основе, например, запускали эмуляторы в GitHub Actions. Поскольку люди используют эмуляторы Google, это должно заставить Google заботиться о них. Установка эмулятора F-Droid является свободным программным обеспечением: базовый образ Debian, работающий на GNU/Linux runners. Любой проект, использующий GitLab CI, может использовать эту установку для запуска эмуляторов в запросах на слияние и т.д.
Важно использовать системные образы default
, а не google_apis
, поскольку
они не содержат бинарных блоков Google Play и приложений, а также потому,
что приложения Google сильно замедляют процесс загрузки. Кроме того,
похоже, что системные образы с android-22
по android-27
требуют меньше
ресурсов, чем более новые, настолько, что они вряд ли вообще будут работать
в некоторых проектах.
Репозиторий microg system-image repository также включен в установку F-Droid. В настоящее время существует два образа:
system-images;android-29;microg;x86_64
system-images;android-23;microg;x86
- требуется эмулятор v28 или старше, так как в нем отсутствует ядро “ranchu”.
Использование
В fdroiclient
setup
используются шаблоны YAML для упрощения выбора конкретных настроек
эмулятора, в частности,
test-template
,
connected-template
и
kvm-template
.
Мы используем образ microg в fdroidclient следующим образом:
kvm 29 microg x86_64:
<<: *kvm-template
no-accel 29 microg x86_64:
<<: *test-template
<<: *connected-template
- Для облегчения отладки журнал запуска ядра эмулятора можно найти в корне
проекта в kernel.log, а полный вывод logcat в logcat.txt. Их можно
включить в
artifacts:
для легкого доступа. - Чтобы запустить задания, использующие KVM, сначала необходимо иметь
CI-бегунок GitLab, который поддерживает KVM и помечен
fdroid
иkvm
. Затем необходимо установить переменнуюRUN_KVM_JOBS
в настройках CI/CD Settings в значениеtrue
.
Чтобы развитие использования образов эмуляторов в GitLab CI продолжалось, создана вики-страница для документирования советов и рекомендаций, проблем и новых разработок: