![Page 1: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/1.jpg)
Highway toContinuous Integration
Денис Трифонов
![Page 2: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/2.jpg)
Обо мне
Инженер по качеству в команде Continuous Delivery
2
![Page 4: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/4.jpg)
Справочное API
— Версии 1.3 и 2.0
— 7 приложений + Core на Yii Framework (PHP)
— Функциональные и юниттесты
— Git Flow
— 20 смежных команд
4
![Page 5: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/5.jpg)
Проблемы
— Разработчики коммитят бажный код
— Тестировщики не находят баги или не успевают проверить фичу
5
![Page 6: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/6.jpg)
Последствия
— Узнаем о багах при подготовке к релизу
— Релиз затягивается или переносится
6
![Page 7: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/7.jpg)
„Мы хотим выявлять багипо мере готовности фич,
а не при подготовке к релизу“
![Page 8: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/8.jpg)
Continuous Integration is a software development practice where
members of a team integrate their work frequently, usually each
person integrates at least daily leading to multiple integrations per
day. Each integration is verified by an automated build (including test)
to detect integration errors as quickly as possible.
Martin Fowler
“8
![Page 9: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/9.jpg)
Continuous Integration —
не решит всех проблем разработки, но позволит выявлять баги на
этапе программирования фичи
9
![Page 10: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/10.jpg)
Continuous
Integration
![Page 11: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/11.jpg)
Интеграционная
сборка≤ 5 min
![Page 12: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/12.jpg)
Что у нас есть
— Ветка с новой фичей
— Тесты
— Система деплоя
12
![Page 13: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/13.jpg)
Этапы интеграционной сборки
1. Деплой фичи
2. Выполнение тестов
— Когда все хорошо, сливаем фичу в мастер
— Когда чтото упало, сообщаем о проблеме
13
![Page 14: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/14.jpg)
6 часов
![Page 15: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/15.jpg)
![Page 16: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/16.jpg)
Время этапов сборки
— Деплой за 3 минуты
— Тесты за 5 часов 57 минут
16
![Page 17: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/17.jpg)
12 000 тестов
![Page 18: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/18.jpg)
Анализ выполнения тестов
— Максимальное время выполнения одного теста 2 минуты
— Среднее время выполнения одного теста 1,5 секунды
— PHPUnit использует одно ядро (из 16) процессора
18
![Page 19: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/19.jpg)
ParaTest
github.com/brianium/paratest
Поддержка параллельного выполнения тестов на PHPUnit
19
![Page 20: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/20.jpg)
Пример
$ paratest -p 16 --phpunit ./phpunit \
-c ./phpunit.xml ./tests
20
![Page 21: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/21.jpg)
50 минут
![Page 22: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/22.jpg)
Ищем компромисс
— Долгая интеграция, но стабильный мастер
— Быстрая интеграция, но возможные баги в мастере
22
![Page 23: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/23.jpg)
Исключаем тесты
— Оставляем только приоритетные тесты
— Оставляем только формат JSON (убрали JSONP и XML)
Итого: 1500 тестов
23
![Page 24: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/24.jpg)
5 минут
![Page 25: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/25.jpg)
Еще быстрее?
Если не было изменений в окружении, то достаточно обновить
только приложения
25
![Page 26: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/26.jpg)
Деплой окружения и приложений
— Мелкие правки с помощью Phing (только приложения)
— Большие правки с помощью Chef (приложения + окружение)
26
![Page 27: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/27.jpg)
3 минуты
![Page 28: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/28.jpg)
Лень побеждает
У нас есть автоматизированная сборка, но после нее приходится
самому писать в JIRA о смене статуса фичи
28
![Page 29: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/29.jpg)
Интеграция с JIRA
— Комментарий в тикете об автоматическом мерже веток
— Метка у тикета при попадании в мастер
29
![Page 30: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/30.jpg)
JIRA REST API Client
github.com/chobie/jiraapirestclient
APIклиент для JIRA на PHP
30
![Page 31: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/31.jpg)
Пример (PHP)
$client->addComment($jiraIssue, $jiraComment);
$client->editIssue($jiraIssue, [
'fields' => ['labels' => $labels]
]);
31
![Page 32: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/32.jpg)
Интеграционная сборка в работе
Feature Branch -> Deploy -> Priority Tests
-> Merge to Master -> Mark Issue in JIRA
32
![Page 33: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/33.jpg)
Профит
Разработчик спустя три минуты после готовности фичи может
слить ее в мастер
33
![Page 34: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/34.jpg)
![Page 35: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/35.jpg)
Но...
Мы все также неуверенны в мастере
35
![Page 36: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/36.jpg)
Регрессионная сборка
Master Branch -> Deploy -> Full Tests
36
![Page 37: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/37.jpg)
Запускаем регрессионную сборкудва раза в день
![Page 38: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/38.jpg)
Регрессия перед релизом
Master Branch -> RC -> Deploy -> Full Tests
-> Merge to Stable -> Mark Issues in JIRA
38
![Page 39: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/39.jpg)
Профит
Мастер становится стабильным спустя половину дня вместо пяти
39
![Page 40: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/40.jpg)
![Page 41: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/41.jpg)
![Page 42: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/42.jpg)
Как так?!
Упала миграция на бою, хотя регрессия прошла успешно
42
![Page 43: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/43.jpg)
Задача
Перед регрессией нужно полностью восстанавливать исходное
состояние окружения
43
![Page 44: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/44.jpg)
Куда поместить окружение
— Open Stack
— Virtual Box
— Docker
— Другие технологии контейнеризации и виртуализации
44
![Page 45: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/45.jpg)
Архитектура в Open Stack
— APIнода
— Нода с тестами
— Любая нода по требованию за 1 минуту
45
![Page 46: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/46.jpg)
Обновленная регрессия
... -> Revert VM -> Deploy -> ... -> Update Snapshot
46
![Page 47: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/47.jpg)
Профит
Во время регрессии деплоим так же, как на бою
47
![Page 48: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/48.jpg)
Понедельник день тяжелый
Вышел новый сотрудник, начал настраивать рабочее окружение и
вылетели ошибки во время разворачивания API
48
![Page 49: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/49.jpg)
Сборка деплоя с нуля
VM Up -> Deploy -> Import Data -> Tests -> VM Destroy
49
![Page 50: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/50.jpg)
Профит
Мы уверены, что в любое время можем развернуть API без
ошибок
50
![Page 51: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/51.jpg)
Итого
1. Интеграционная сборка
2. Регрессионная сборка
3. Сборка деплоя с нуля
51
![Page 52: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/52.jpg)
Итого
Выявляем баги не при подготовке релиза, а по мере готовности
фич. Сборки падают, а значит выполняют свои задачи.
52
![Page 53: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/53.jpg)
Результат
— Мы находим проблемы спустя три минуты вместо пяти дней
— Мастер становится стабильным спустя половину дня вместо пяти
53
![Page 54: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/54.jpg)
Вывод
Continuous Integration помогает выявлять баги на этапе
программирования фичи
54
![Page 55: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/55.jpg)
Continuous Integration —разработка без скоростных
ограничений
![Page 56: Highway to Сontinuous Integration, Денис Трифонов (2GIS)](https://reader034.vdocuments.us/reader034/viewer/2022042518/5585bab6d8b42a5e5a8b4c7c/html5/thumbnails/56.jpg)