Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Витя Русакович,
Минск,
Front-End разработчик
в “GP Software.travel”
1987 г.в.
Непрерывная
интеграция
Кто всё сломал?
Содержание
1. Что такое CI?
2. Как пользоваться?
3. Демо
3
Зачем CI менеджеру и программисту?
До: “Ну, завтра я заливаю свою ветку, потом
пару дней чтобы ее замерджить, пару дней
чт...
Каждый коммит - изменение приложение
Изменение приложения - повторный запуск тестов
Много программистов - много коммитов и...
Что интегрировать?
Части единого приложения, которые
разрабатываются в разными командами,
ветки в git/hg/svn/etc.
6
Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4...
Автоматическая сборка
Bamboo, Jenkins, Travis CI, Snap CI
8
Нам нужно больше сервисов!
https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software
9
Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4...
Да, все комитят часто
10 коммитов за 3 часа
~ 1 коммит каждые 20 минут
11
Легкий merge
12
“Не, я комичу раз в неделю”
13
Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4...
Быстрая сборка и тесты.
А почему должно быть медленно?
15
Большое приложение - много тестов
16
Java unit 500 тестов
E2E via REST 40 сценариев
650 тестов
E2E via Selenium 20 сценари...
Параллельно - быстрее
17
Последовательно Параллельно
JS unit (component
render + clicks)
10 мин 5 мин
REST 60 мин 9 мин
Se...
На сервере Bamboo CI - 15 минут на всё
Запускаем все тесты перед push
18
Back-end API (Java,
Scala)
18 мин = 9 мин REST
+ ...
Lifehack - как сделать быстро
1. Можно заменить Selenium на REST
2. Длинные тесты запускать по расписанию,
например:
● uni...
Заменяем Selenium E2E на REST
20
Selenium - 30 сек REST - 3 сек
browser.open(‘http://ya.ru’);
findElement(‘input’).sendKey...
Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4...
Легко узнать статус любой сборки
22
Идеальный мир
23
Привлекаем внимание
24
Исправляем сборку
сломал? исправь! ушел домой? отменим!
25
26
Правила непрерывной интеграции
1. автоматическая сборка с тестами
2. все комитят часто
3. быстрая сборка и быстрые тесты
4...
Создаем настоящую тестовую БД
1. клонируем и очищаем от личных данных
2. добавляем настройки для тестов
3. создаем слепок ...
Тестируем заказ столика
29
Continuous Delivery с т.з. скрипта
Помечаем тегом удачную ревизию:
revisionNumber=${bamboo.repository.revision.number}
hg ...
Continuous Delivery с т.з.
менеджера
прошли все тесты - новая версия в бой
31
Как подготовиться к CI?
● запуск тестов по команде, “npm test”
● скрипт запуска завершается после
окончания тестов:
○ код ...
Форматы отчетов
TAP - Test Anything Protocol
JUnit xml format
33
Интеграция в облаке - Travis/Snap
34
Travis CI
● Облачный сервис для запуска тестов
● Легкая интеграция с github
○ бесплатно для открытых проектов
○ от $120 в ...
Snap-CI
● Облачный сервис для запуска тестов
● Простая интеграция - привязать
репозиторий и ввести команду для тестов
○ Бе...
Демо
Github + Snap-CI + JS Unit test (Phantom.JS)
37
Ресурсы
1. Bamboo, Jenkins
2. Travis CI, Snap CI
3. Демо-проект
4. Cветофор за $22
5. Arduino за $10 и реле за $10
38
Библиотеки
Тестозапускатели JS кода
● Mocha (демо)
● Karma (angular)
Тестозапускатели E2E (Selenium) на JS
● Protractor (a...
Вопросы?
Витя Русакович, Минск
nemiga@gmail.com
Презентация - https://goo.gl/rb7PhZ
40
Upcoming SlideShare
Loading in …5
×

"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23

"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович

  • Login to see the comments

  • Be the first to like this

"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23

  1. 1. Витя Русакович, Минск, Front-End разработчик в “GP Software.travel” 1987 г.в.
  2. 2. Непрерывная интеграция Кто всё сломал?
  3. 3. Содержание 1. Что такое CI? 2. Как пользоваться? 3. Демо 3
  4. 4. Зачем CI менеджеру и программисту? До: “Ну, завтра я заливаю свою ветку, потом пару дней чтобы ее замерджить, пару дней чтобы QA пробежались по багам, потом можно релизить” После: “Ну, завтра я заливаю свою ветку, потом минут 15 чтобы ее замержить, потом можно релизить” 4
  5. 5. Каждый коммит - изменение приложение Изменение приложения - повторный запуск тестов Много программистов - много коммитов и запусков тестов Зачем интегрировать? 5
  6. 6. Что интегрировать? Части единого приложения, которые разрабатываются в разными командами, ветки в git/hg/svn/etc. 6
  7. 7. Правила непрерывной интеграции 1. автоматическая сборка с тестами 2. все комитят часто 3. быстрая сборка и быстрые тесты 4. легко узнать статус любой сборки 5. тесты используют настоящую БД 7
  8. 8. Автоматическая сборка Bamboo, Jenkins, Travis CI, Snap CI 8
  9. 9. Нам нужно больше сервисов! https://en.wikipedia.org/wiki/Comparison_of_continuous_integration_software 9
  10. 10. Правила непрерывной интеграции 1. автоматическая сборка с тестами 2. все комитят часто 3. быстрая сборка и быстрые тесты 4. легко узнать статус любой сборки 5. тесты используют настоящую БД 10
  11. 11. Да, все комитят часто 10 коммитов за 3 часа ~ 1 коммит каждые 20 минут 11
  12. 12. Легкий merge 12
  13. 13. “Не, я комичу раз в неделю” 13
  14. 14. Правила непрерывной интеграции 1. автоматическая сборка с тестами 2. все комитят часто 3. быстрая сборка и быстрые тесты 4. легко узнать статус любой сборки 5. тесты используют настоящую БД 14
  15. 15. Быстрая сборка и тесты. А почему должно быть медленно? 15
  16. 16. Большое приложение - много тестов 16 Java unit 500 тестов E2E via REST 40 сценариев 650 тестов E2E via Selenium 20 сценариев 250 тестов JS unit tests 6600 тестов
  17. 17. Параллельно - быстрее 17 Последовательно Параллельно JS unit (component render + clicks) 10 мин 5 мин REST 60 мин 9 мин Selenium IE8 полдня?! 5 шт за 15 мин Selenium Chrome 60 мин 9 мин
  18. 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. 19. Lifehack - как сделать быстро 1. Можно заменить Selenium на REST 2. Длинные тесты запускать по расписанию, например: ● unit тесты - на каждый коммит ● selenium тесты под каждый браузер - ночью 19
  20. 20. Заменяем Selenium E2E на REST 20 Selenium - 30 сек REST - 3 сек browser.open(‘http://ya.ru’); findElement(‘input’).sendKeys(‘MoscowJS’); findElement(‘submit’).click(); waitPageLoaded(); var results = findElements(‘ul.result li’) .map(getText()); results = http .get(‘http://ya.ru/search? q=MoscowJS’) expect(results).toHaveSize(10); expect(result[0]).toContain(‘http://moscowjs.ru’)
  21. 21. Правила непрерывной интеграции 1. автоматическая сборка с тестами 2. все комитят часто 3. быстрая сборка и быстрые тесты 4. легко узнать статус любой сборки 5. тесты используют настоящую БД 21
  22. 22. Легко узнать статус любой сборки 22
  23. 23. Идеальный мир 23
  24. 24. Привлекаем внимание 24
  25. 25. Исправляем сборку сломал? исправь! ушел домой? отменим! 25
  26. 26. 26
  27. 27. Правила непрерывной интеграции 1. автоматическая сборка с тестами 2. все комитят часто 3. быстрая сборка и быстрые тесты 4. легко узнать статус любой сборки 5. тесты используют настоящую БД 27
  28. 28. Создаем настоящую тестовую БД 1. клонируем и очищаем от личных данных 2. добавляем настройки для тестов 3. создаем слепок (snapshot) 4. каждую ночь разворачиваем слепок 28
  29. 29. Тестируем заказ столика 29
  30. 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
  31. 31. Continuous Delivery с т.з. менеджера прошли все тесты - новая версия в бой 31
  32. 32. Как подготовиться к CI? ● запуск тестов по команде, “npm test” ● скрипт запуска завершается после окончания тестов: ○ код выхода == 0 - тесты прошли успешно ○ код выхода != 0 - тесты упали ● создается отчет (по желанию) для построения списка тестов: junit.xml, TAP 32
  33. 33. Форматы отчетов TAP - Test Anything Protocol JUnit xml format 33
  34. 34. Интеграция в облаке - Travis/Snap 34
  35. 35. Travis CI ● Облачный сервис для запуска тестов ● Легкая интеграция с github ○ бесплатно для открытых проектов ○ от $120 в месяц для закрытых (100 первых сборок - бесплатно!) ● JavaScript, PHP, C++, Ruby, Visual Basic 35
  36. 36. Snap-CI ● Облачный сервис для запуска тестов ● Простая интеграция - привязать репозиторий и ввести команду для тестов ○ Бесплатно для открытых проектов ○ от $30 для закрытых проектов ● Больше настроек через GUI, например, запуск по расписанию (cron) - зачем? ● Дешевле 36
  37. 37. Демо Github + Snap-CI + JS Unit test (Phantom.JS) 37
  38. 38. Ресурсы 1. Bamboo, Jenkins 2. Travis CI, Snap CI 3. Демо-проект 4. Cветофор за $22 5. Arduino за $10 и реле за $10 38
  39. 39. Библиотеки Тестозапускатели JS кода ● Mocha (демо) ● Karma (angular) Тестозапускатели E2E (Selenium) на JS ● Protractor (angular) ● webdriver.io, Casper.JS, DalekJS 39
  40. 40. Вопросы? Витя Русакович, Минск nemiga@gmail.com Презентация - https://goo.gl/rb7PhZ 40

×