Slide 1

Slide 1 text

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

Slide 31

Slide 31 text

gradle.properties org.gradle.jvmargs=-Xmx8192m org.gradle.daemon=false org.gradle.caching=true org.gradle.parallel=true* org.gradle.workers.max=8 *broken in Kotlin 1.2.20 issue KT-22513 31

Slide 32

Slide 32 text

Билды на PR • Lint • Build release • Unit tests • UI tests 32

Slide 33

Slide 33 text

Android lint • он есть (: 33

Slide 34

Slide 34 text

Build release 34 Gradle build durason sme, minutes 0 5,5 11 16,5 22 default build cache build cache + parallel *KT-22513

Slide 35

Slide 35 text

Unit tests 35

Slide 36

Slide 36 text

Unit tests 36

Slide 37

Slide 37 text

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

Slide 40

Slide 40 text

Спасибо! sapinchuk 40