4. Зачем CI менеджеру и программисту?
До: “Ну, завтра я заливаю свою ветку, потом
пару дней чтобы ее замерджить, пару дней
чтобы QA пробежались по багам, потом
можно релизить”
После: “Ну, завтра я заливаю свою ветку,
потом минут 15 чтобы ее замержить, потом
можно релизить”
4
5. Каждый коммит - изменение приложение
Изменение приложения - повторный запуск тестов
Много программистов - много коммитов и запусков тестов
Зачем интегрировать?
5
7. Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4. легко узнать статус любой сборки
5. тесты используют настоящую БД
7
9. Нам нужно больше сервисов!
https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software
9
10. Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4. легко узнать статус любой сборки
5. тесты используют настоящую БД
10
11. Да, все комитят часто
10 коммитов за 3 часа
~ 1 коммит каждые 20 минут
11
14. Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4. легко узнать статус любой сборки
5. тесты используют настоящую БД
14
16. Большое приложение - много тестов
16
Java unit 500 тестов
E2E via REST 40 сценариев
650 тестов
E2E via Selenium 20 сценариев
250 тестов
JS unit tests 6600 тестов
17. Параллельно - быстрее
17
Последовательно Параллельно
JS unit (component
render + clicks)
10 мин 5 мин
REST 60 мин 9 мин
Selenium IE8 полдня?! 5 шт за 15 мин
Selenium Chrome 60 мин 9 мин
18. На сервере Bamboo CI - 15 минут на всё
Запускаем все тесты перед push
18
Back-end API (Java,
Scala)
18 мин = 9 мин REST
+ 9 мин Selenium E2E
Front-end (JS, CSS) 19 мин = 10 мин JS
+ 9 мин Selenium E2E
После push
19. Lifehack - как сделать быстро
1. Можно заменить Selenium на REST
2. Длинные тесты запускать по расписанию,
например:
● unit тесты - на каждый коммит
● selenium тесты под каждый браузер -
ночью
19
21. Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4. легко узнать статус любой сборки
5. тесты используют настоящую БД
21
27. Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4. легко узнать статус любой сборки
5. тесты используют настоящую БД
27
28. Создаем настоящую тестовую БД
1. клонируем и очищаем от личных данных
2. добавляем настройки для тестов
3. создаем слепок (snapshot)
4. каждую ночь разворачиваем слепок
28
30. Continuous Delivery с т.з. скрипта
Помечаем тегом удачную ревизию:
revisionNumber=${bamboo.repository.revision.number}
hg tag -f --user bambooci -r $revisionNumber latest_RC
hg push
Теперь можно не боясь разворачивать
live из этого тега
$ ssh root@live_server
[root@live_server ~]# cd /www/live/
[root@live_server /www/live]# hg up -tag latest_RC 30
32. Как подготовиться к CI?
● запуск тестов по команде, “npm test”
● скрипт запуска завершается после
окончания тестов:
○ код выхода == 0 - тесты прошли успешно
○ код выхода != 0 - тесты упали
● создается отчет (по желанию) для
построения списка тестов: junit.xml, TAP
32
35. Travis CI
● Облачный сервис для запуска тестов
● Легкая интеграция с github
○ бесплатно для открытых проектов
○ от $120 в месяц для закрытых (100 первых
сборок - бесплатно!)
● JavaScript, PHP, C++, Ruby, Visual Basic 35
36. Snap-CI
● Облачный сервис для запуска тестов
● Простая интеграция - привязать
репозиторий и ввести команду для тестов
○ Бесплатно для открытых проектов
○ от $30 для закрытых проектов
● Больше настроек через GUI, например,
запуск по расписанию (cron) - зачем?
● Дешевле
36