CI процессы в Android
разработке Avito
Пинчук Сергей
1
Slide 2
Slide 2 text
План
• Общие сведения о Avito Android
• Интеграция проверок на CI
• Обзор набора тестов и их оптимизации
• Планы на будущее
• Итоги
• Вопросы
2
Slide 3
Slide 3 text
Avito Android CI это
• Более 11,000 unit-тестов
• Более 800 компонентных тестов
• Более 300 функциональных end-to-end тестов
• Порядка 50 прогонов в день
• Продолжительность 100 часов ежедневно
3
Slide 4
Slide 4 text
Время выполнения unit-тестов
4
Slide 5
Slide 5 text
Время выполнения unit-тестов
5
Slide 6
Slide 6 text
Стек технологий
6
Slide 7
Slide 7 text
Git flow
7
Slide 8
Slide 8 text
Git flow
8
Slide 9
Slide 9 text
Git flow
9
Slide 10
Slide 10 text
Git flow
10
Slide 11
Slide 11 text
Интеграция тестов на CI
??????
11
Slide 12
Slide 12 text
Интеграция тестов на CI
Tests
12
Slide 13
Slide 13 text
Интеграция тестов на CI
13
Slide 14
Slide 14 text
Интеграция тестов на CI
Tests
Tests
14
Slide 15
Slide 15 text
Интеграция тестов на CI
15
Slide 16
Slide 16 text
git merge origin/develop
Tests
16
Slide 17
Slide 17 text
git merge origin/develop
Tests
17
Slide 18
Slide 18 text
git merge origin/develop
Tests
18
Slide 19
Slide 19 text
Pull request flow в Avito
• Билды запускаются при открытии Pull Request и
каждом последующем коммите
• Перед каждым тестом git merge origin/develop
• “Контрольный” запуск тестов перед merge в
develop
19
Slide 20
Slide 20 text
Причины хранить CI скрипты в VCS
• Версионирование
• Синхронизация изменений
• Тестирование изменений на ветке
• Локальная воспроизводимость
20
Slide 21
Slide 21 text
Настройка окружения
21
VS
Slide 22
Slide 22 text
Плюсы использования Docker
• Стабильность и повторяемость окружения
• Локальный запуск CI билдов
• Централизованное и контролируемое обновление
• Версионирование
22
Slide 23
Slide 23 text
Docker образы
• Builder
• Emulator
• DevOps
23
Slide 24
Slide 24 text
Builder Dockerfile
RUN wget https://dl.google.com/android/repository/sdk-
tools-linux-3859397.zip -O android-sdk.zip
RUN unzip android-sdk.zip -d /opt/android-sdk
COPY android-sdk-packages /android-sdk-packages
RUN yes | sdkmanager —package_file=/android-sdk-packages
RUN yes | sdkmanager —licenses
24
Slide 25
Slide 25 text
Builder Dockerfile
RUN wget https://dl.google.com/android/repository/sdk-
tools-linux-3859397.zip -O android-sdk.zip
RUN unzip android-sdk.zip -d /opt/android-sdk
COPY android-sdk-packages /android-sdk-packages
RUN yes | sdkmanager —package_file=/android-sdk-packages
RUN yes | sdkmanager —licenses
25
Slide 26
Slide 26 text
Builder Dockerfile
RUN wget https://dl.google.com/android/repository/sdk-
tools-linux-3859397.zip -O android-sdk.zip
RUN unzip android-sdk.zip -d /opt/android-sdk
COPY android-sdk-packages /android-sdk-packages
RUN yes | sdkmanager —package_file=/android-sdk-packages
RUN yes | sdkmanager —licenses
26
Slide 27
Slide 27 text
Builder Dockerfile
RUN wget https://dl.google.com/android/repository/sdk-
tools-linux-3859397.zip -O android-sdk.zip
RUN unzip android-sdk.zip -d /opt/android-sdk
COPY android-sdk-packages /android-sdk-packages
RUN yes | sdkmanager —package_file=/android-sdk-packages
RUN yes | sdkmanager —licenses
27
Slide 28
Slide 28 text
Emulator Dockerfile
RUN echo "no" | \
avdmanager create avd \
—name emulator_19 \
—package "system-images;android-19;google_apis;x86" \
—abi google_apis/x86
RUN mksdcard -l e 512M /sdcard.img
COPY hardware/config_19.ini \
$HOME/.android/avd/emulator_19.avd/config.ini
28
Slide 29
Slide 29 text
Emulator Dockerfile
RUN echo "no" | \
avdmanager create avd \
—name emulator_19 \
—package "system-images;android-19;google_apis;x86" \
—abi google_apis/x86
RUN mksdcard -l e 512M /sdcard.img
COPY hardware/config_19.ini \
$HOME/.android/avd/emulator_19.avd/config.ini
29
Slide 30
Slide 30 text
Emulator Dockerfile
RUN echo "no" | \
avdmanager create avd \
—name emulator_19 \
—package "system-images;android-19;google_apis;x86" \
—abi google_apis/x86
RUN mksdcard -l e 512M /sdcard.img
COPY hardware/config_19.ini \
$HOME/.android/avd/emulator_19.avd/config.ini
30
UI tests
• Не запускаем автотесты на железных
устройствах
• Отказались от Firebase
• Тестируем на AVD эмуляторах
37
Slide 38
Slide 38 text
Цели на будущее
• impact-анализ в UI тестах
• gradle remote cache
38
Slide 39
Slide 39 text
Итоги
• Тестирование на CI это всегда компромисс между
полнотой проверок и затрачиваемыми ресурсами
• Не делать карго-культ из CI/CD практик
• Пробовать что-то новое
39