Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
«CI процессы в Android разработке Avito», Серге...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
AvitoTech
March 20, 2018
Programming
0
450
«CI процессы в Android разработке Avito», Сергей Пинчук, Avito
AvitoTech
March 20, 2018
Tweet
Share
More Decks by AvitoTech
See All by AvitoTech
Один кликстрим на все бэкенды. Дмитрий Хасанов (Авито)
avitotech
0
800
«Масштабируемая архитектура фронтенда» — Роман Дворнов, Avito
avitotech
0
1.2k
Атомарные SPA — Александр Китов, Альфа-Банк
avitotech
0
1.7k
Моделирование пользовательских предпочтений в мультимодальных данных. Hady W. Lauw, Максим Ткаченко (Singapore Management University)
avitotech
0
390
Кластеризация волатильных объявлений с помощью EM-алгоритма — Василий Лексин (Avito)
avitotech
0
410
«(Не)Безопасность 101» — Григорий Джанелидзе, Mosdroid
avitotech
0
500
Кластеризация волатильных объявлений с помощью EM-алгоритма — Василий Лексин (Avito)
avitotech
0
110
Аналитическое хранилище Avito.ru — от больших к очень большим данным — Артем Данилов (Avito)
avitotech
1
4.8k
Кросс-продуктовые эффекты, или как мы оценивали вклад «Электричек» — Екатерина Лосева (Туту.ру)
avitotech
0
4.6k
Other Decks in Programming
See All in Programming
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
370
CSC307 Lecture 15
javiergs
PRO
0
220
今、アーキテクトとして 品質保証にどう関わるか
nealle
0
200
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
480
Raku Raku Notion 20260128
hareyakayuruyaka
0
430
SourceGeneratorのマーカー属性問題について
htkym
0
140
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
170
手戻りゼロ? Spec Driven Developmentとは@KAG AI week
tmhirai
1
160
「やめとこ」がなくなった — 1月にZennを始めて22本書いた AI共創開発のリアル
atani14
0
350
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.4k
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
1
130
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Designing for Timeless Needs
cassininazir
0
150
Building Adaptive Systems
keathley
44
2.9k
The World Runs on Bad Software
bkeepers
PRO
72
12k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
140
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
250
Being A Developer After 40
akosma
91
590k
What does AI have to do with Human Rights?
axbom
PRO
1
2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
RailsConf 2023
tenderlove
30
1.4k
sira's awesome portfolio website redesign presentation
elsirapls
0
180
Visualization
eitanlees
150
17k
Transcript
CI процессы в Android разработке Avito Пинчук Сергей 1
План • Общие сведения о Avito Android • Интеграция проверок
на CI • Обзор набора тестов и их оптимизации • Планы на будущее • Итоги • Вопросы 2
Avito Android CI это • Более 11,000 unit-тестов • Более
800 компонентных тестов • Более 300 функциональных end-to-end тестов • Порядка 50 прогонов в день • Продолжительность 100 часов ежедневно 3
Время выполнения unit-тестов 4
Время выполнения unit-тестов 5
Стек технологий 6
Git flow 7
Git flow 8
Git flow 9
Git flow 10
Интеграция тестов на CI ?????? 11
Интеграция тестов на CI Tests 12
Интеграция тестов на CI 13
Интеграция тестов на CI Tests Tests 14
Интеграция тестов на CI 15
git merge origin/develop Tests 16
git merge origin/develop Tests 17
git merge origin/develop Tests 18
Pull request flow в Avito • Билды запускаются при открытии
Pull Request и каждом последующем коммите • Перед каждым тестом git merge origin/develop • “Контрольный” запуск тестов перед merge в develop 19
Причины хранить CI скрипты в VCS • Версионирование • Синхронизация
изменений • Тестирование изменений на ветке • Локальная воспроизводимость 20
Настройка окружения 21 VS
Плюсы использования Docker • Стабильность и повторяемость окружения • Локальный
запуск CI билдов • Централизованное и контролируемое обновление • Версионирование 22
Docker образы • Builder • Emulator • DevOps 23
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
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
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
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
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
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
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
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
Билды на PR • Lint • Build release • Unit
tests • UI tests 32
Android lint • он есть (: 33
Build release 34 Gradle build durason sme, minutes 0 5,5
11 16,5 22 default build cache build cache + parallel *KT-22513
Unit tests 35
Unit tests 36
UI tests • Не запускаем автотесты на железных устройствах •
Отказались от Firebase • Тестируем на AVD эмуляторах 37
Цели на будущее • impact-анализ в UI тестах • gradle
remote cache 38
Итоги • Тестирование на CI это всегда компромисс между полнотой
проверок и затрачиваемыми ресурсами • Не делать карго-культ из CI/CD практик • Пробовать что-то новое 39
Спасибо! sapinchuk 40