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.

Jenkins 2.0: Организуем тестирование в составе Continuous Delivery

5,054 views

Published on

Доклад Олега Ненашева на конференции SQA Days-19, 20-21 мая 2016 г., Санкт-Петербург

Published in: Education
  • Be the first to comment

Jenkins 2.0: Организуем тестирование в составе Continuous Delivery

  1. 1. ©2016CloudBees,Inc.AllRightsReserved©2015CloudBees,Inc.AllRightsReserved Jenkins 2.0: Организуем тестирование в составе Continuous Delivery Олег Ненашев, CloudBees, Inc.
  2. 2. ©2016CloudBees,Inc.AllRightsReserved • ~10 лет в R&D и автоматизации • Фокус: электроника и встраиваемое ПО – Intel, Sitronics, Synopsys • Развертывание и поддержка больших систем автоматизации • Автоматизация тестирования и QA 2 О себе. Бэкграунд @oleg_nenashev oleg-nenashev onenashev
  3. 3. ©2016CloudBees,Inc.AllRightsReserved О себе. Jenkins 3 @oleg_nenashev oleg-nenashev onenashev • Проект Jenkins, Core team – Развитие ядра – Поддержка плагинов – Организатор митапов – Контакт для прессы в СНГ • Jenkins Developer в CloudBees – CloudBees – контрибьютор Jenkins – Помогаем строить enterprise-системы на базе Jenkins – CloudBees Jenkins Platform – Поддержка 24/7
  4. 4. ©2016CloudBees,Inc.AllRightsReserved Кто такой Jenkins? 4 • Сервер автоматизации • Continuous Integration • Continuous Delivery • DevOps • … • Веб-интерфейс • Распределенная система • Open-source (MIT) https://jenkins.io Сборка Тестиро- вание Создание пакетов Установка, развер- тывание Построе- ние отчетов, аналитика и другое
  5. 5. ©2016CloudBees,Inc.AllRightsReserved Кто такой Jenkins • 2005: Появился как Hudson • 2008: Duke's Choice Award • 2011: Переименование в Jenkins • 2012: Самый популярный сервер непрерывной интеграции • 2015: >100к активных инсталляций • 2015: 1200 плагинов 5
  6. 6. ©2016CloudBees,Inc.AllRightsReserved Jenkins 2.0 Выпущен 20 апреля 2016 https://jenkins-ci.org/2.0/ 6
  7. 7. ©2016CloudBees,Inc.AllRightsReserved Jenkins 2.0. А зачем? • Смена фокуса с CI в разработке софта – Continuous Delivery/Deployment – DevOps – Everything as Code • Проблемы User Experience в Jenkins – Сложность настройки системы и задач – Неполная документация – Интеграционные проблемы 7
  8. 8. ©2016CloudBees,Inc.AllRightsReserved •Новый вебсайт •Изменение базового набора плагинов •Security-опции включены по- умолчанию •Улучшения UX: – Новый мастер установки – Улучшение страниц конфигурации задач – Категоризация задач •Pipeline as Code 8 Jenkins 2.0. Что внутри? http://bit.ly/jenkins20
  9. 9. ©2016CloudBees,Inc.AllRightsReserved Предыдущие доклады о Jenkins 2.0 •Митапы по Jenkins в Санкт- Петербурге – Инсайды по статусу разработки Jenkins 2.0 – О Jenkins в целом •QA: Conference – Jenkins 2.0 Что внутри? 9 St. Petersburg Jenkins Meetup @jenkins_spb
  10. 10. ©2016CloudBees,Inc.AllRightsReserved Сегодня… Continuous Delivery 10 Disclaimer: • Презентация не является тренингом • Презентация отражает личное мнение докладчика • Личное мнение докладчика может не совпадать с позицией компании или сообщества Jenkins • Ссылки на картинки – в бэкапе
  11. 11. ©2016CloudBees,Inc.AllRightsReserved Было. Непрерывная Интеграция 11 http://www.osp.ru/os/2008/06/5344965/
  12. 12. ©2016CloudBees,Inc.AllRightsReserved Было. Непрерывная Интеграция 12 Релиз Релиз- кандидатОсновная ветка Изменение 1 Изменение 2 Изменение 3 QA мало QA мало QA мало QA
  13. 13. ©2016CloudBees,Inc.AllRightsReserved 13
  14. 14. ©2016CloudBees,Inc.AllRightsReserved • Они начинают раньше «работать» • Финансовый эффект достигается раньше Зачем доставлять изменения раньше? 14
  15. 15. ©2016CloudBees,Inc.AllRightsReserved Как не надо делать 15 РелизОсновная ветка Изменение 1 Изменение 2 Изменение 3 мало QA мало QA мало QA “Тяп-ляп и в продакшн” Исправляем…Исправляем…
  16. 16. ©2016CloudBees,Inc.AllRightsReserved Continuous Delivery 16 РелизОсновная ветка Изменение 1 Изменение 2 Изменение 3 больше QA больше QA Больше QA Быстрый откат
  17. 17. ©2016CloudBees,Inc.AllRightsReserved CD для инфраструктуры… • Инфраструктура: – критична для проектов – меняется вместе с кодом – должна тестироваться • Infrastructure As Code • DevOps 17
  18. 18. ©2016CloudBees,Inc.AllRightsReserved •Короткие циклы разработки •Всегда дедлайн •Нет времени на юнит-тесты •Разбиение систем на модули CD для разработчиков… 18
  19. 19. ©2016CloudBees,Inc.AllRightsReserved CD для контроля качества… •Короткие циклы верификации •Автоматизация всего: – Тестирование (все типы) – Статический анализ кода – Контроль совместимости модулей (N-1) – … •Надежность контроля – False negative опасны 19
  20. 20. ©2016CloudBees,Inc.AllRightsReserved Что нам нужно для CD? •Параллелизация (что можно) •Версионирование кода и процедур сборки •Воспроизводимость тестов и сборок – Чистое окружение для каждого прогона – Тесты сами подготавливают окружение •Тестирование на реальном релизе – Staging-репозитории релизов 20
  21. 21. ©2016CloudBees,Inc.AllRightsReserved Что нужно? Системы автоматизации! 21
  22. 22. ©2016CloudBees,Inc.AllRightsReserved Почему Jenkins? 22 Jenkins – Система Непрерывной Интеграции Фреймворк Автоматизации
  23. 23. ©2016CloudBees,Inc.AllRightsReserved 23 Интеграции >1200 плагинов Интеграция с сотнями тулов Управление процессами автоматизации Автоматизация любых задач Code & Commit Build & Config Scan & Test Release Deploy
  24. 24. ©2016CloudBees,Inc.AllRightsReserved Строим Delivery Pipeline. “Классический” подход • Failover – Naginator-плагин • Воспроизводимость – Чистое окружение – Одноразовые виртуальные машины 24 • Параллелизация – Matrix Project – Parameterized Trigger • Цепочки задач: – MultiJob plugin – Build Pipeline Plugin • Шаблонизация: – Template project – Inheritance plugin
  25. 25. ©2016CloudBees,Inc.AllRightsReserved Классические подходы Спагетти-автоматизация • Зависимости между задачами • Трекинг компонентов • Сложные конфигурации • Дупликация • Сложность поддержки • Ошибки
  26. 26. ©2016CloudBees,Inc.AllRightsReserved Что делать? 26
  27. 27. ©2016CloudBees,Inc.AllRightsReserved Pipeline as Code 27 Описание процесса сборки в виде кода
  28. 28. ©2016CloudBees,Inc.AllRightsReserved •Хранение [X] вместе с проектом •Отслеживание изменений •Тестирование [X] вместе с проектом [X] as code – часть Continuous Delivery Зачем оно нужно? 28 [X] – Configuration, Documentation, Pipeline… Everything!
  29. 29. ©2016CloudBees,Inc.AllRightsReserved 29 Automation as Code Job DSL Pipeline (бывш. Workflow) По-умолчанию предлагается в Jenkins 2.0 Jenkins Job Builder Groovy Groovy YAML Ещё несколько плагинов…
  30. 30. ©2016CloudBees,Inc.AllRightsReserved •Groovy DSL для описания задач •Тип задачи в Jenkins (Pipeline Job) •Open-source экосистема для X-as- code Что такое Jenkins Pipeline? 30
  31. 31. ©2016CloudBees,Inc.AllRightsReserved 31 Pipeline. Запуск скрипта из SCM • Синтаксис на базе Groovy • Шаги для типовых операций • Описания задач можно хранить в SCM • Jenkinsfile – описание задачи в корне репозитория • Шаг git() заменяется на “checkout scm” • http://bit.ly/pipeline-tutorial
  32. 32. ©2016CloudBees,Inc.AllRightsReserved Pipeline Multibranch. Пример • Автоматическое создание задач для веток и pull-request’ов • Независимые репортинг и история сборок • Работает на уровне организаций
  33. 33. ©2016CloudBees,Inc.AllRightsReserved • Генератор шаблонов в UI – Пользователь настраивает шаг сборки в UI – Jenkins генерирует код для Pipeline 33 Фичи Pipeline
  34. 34. ©2016CloudBees,Inc.AllRightsReserved • Отображение последовательного Pipeline • CloudBees перевела проект в OSS 34 Фичи. Pipeline Stage View • Шаг stage() • Логи для отдельных стадий задачи • Интерактивные шаги интегрированы в UI
  35. 35. ©2016CloudBees,Inc.AllRightsReserved Фичи: Pipeline View Plugin • Другое представление Pipeline • Сейчас–релиз вне основного центра апдейтов 35
  36. 36. ©2016CloudBees,Inc.AllRightsReserved • Pipeline не привязан к конкретной ноде • Параллелизация – Команда parallel() – не нужны связки джобов • Множественные node() в одной задаче – => + parallel() – запуск тестов на разных машинах тестов на машинах • Множественные scm() в одной задаче • Интерактивные шаги 36 Специфика Pipeline
  37. 37. ©2016CloudBees,Inc.AllRightsReserved 37 Пример. Параллельные тесты … stage ‘test' parallel 'unit' : { node { unstash 'source' sh "./gradlew :test" stash includes: 'build/jacoco/*.exec', name: 'unitCodeCoverage' step([$class:'JUnitResultArchiver', testResults:'**/build/test-results/*.xml']) } }, 'integration': { node { unstash 'source' sh "./gradlew -PhappyPath :integration-test:test" step([$class:'JUnitResultArchiver', testResults:'**/build/test-results/*.xml']) } }
  38. 38. ©2016CloudBees,Inc.AllRightsReserved • Устойчивость к рестарту мастера – Pipeline хранит контекст и продолжает задачу после рестарта • Шаг sh() – Durable Task Plugin – Устойчивость к разрывам сети • Failover в случае инфраструктурных проблем 38 Pipeline. Надежность инфраструктуры
  39. 39. ©2016CloudBees,Inc.AllRightsReserved Pipeline. Надежность инфраструктуры • Почти любая ошибка может быть перехвачена и отработана Переход на другую ноду Node #1 Node #2. . . . . . for (def board : boards) { echo "trying board " + board; try { node(board) { checkout scm sh ‘./bin/run.sh’ // Call passed => DONE break; } } catch (Exception ex) { if (ex.message.contains ("exit code 255")) { // Fatal error fail("Test run failed") } } } Пример кода
  40. 40. ©2016CloudBees,Inc.AllRightsReserved • Команда load() –загрузка Pipeline из файла • Pipeline Global Library Plugin – Входит в состав ядра Pipeline plugin – Создает Git-репозиторий в Jenkins – Предоставляет глобальные классы и переменные • Pipeline Remote Loader Plugin – Загрузка кода Pipeline из Git/GitHub 40 Фичи. Шаблонизация
  41. 41. ©2016CloudBees,Inc.AllRightsReserved Pipeline. Воспроизводимость • Staging-репозитории – Плагины/CLI для Nexus, Artifactory, TFS, … • «Чистые» окружения – Нативная поддержка виртуальных машин – Поддержка Cloud API Jenkins o AWS, EC2, Azure, Mesos, vSphere, Docker, … – Docker Pipeline Plugin 41
  42. 42. ©2016CloudBees,Inc.AllRightsReserved Docker Pipeline Plugin. Пример • Запуск задачи внутри контейнера: • Сборка и публикация образов: 42
  43. 43. ©2016CloudBees,Inc.AllRightsReserved 43 Пример. CD Jenkins-бота #!groovy def imageName = 'jenkinsciinfra/ircbot’ node('docker') { checkout scm // Немного магии для получения тэга Docker-образа sh 'git rev-parse HEAD > GIT_COMMIT' shortCommit = readFile('GIT_COMMIT').take(6) def imageTag = "build${shortCommit}" stage 'Build ircbot' withMavenEnv (["BUILD_NUMBER=${env.BUILD_NUMBER}:${shortCommit}"]) { sh 'make bot' // Make вызывает Maven } stage 'Build container' def whale = docker.build("${imageName}:${imageTag}”) stage 'Deploy container' whale.push() } https://github.com/jenkins-infra/ircbot
  44. 44. ©2016CloudBees,Inc.AllRightsReserved 44 ЕСТЬ ЛИ РУЧНОЕ ТЕСТИРОВАНИЕ В CONTINUOUS DELIVERY?
  45. 45. ©2016CloudBees,Inc.AllRightsReserved Ручное тестирование • На критическом пути – в идеале НЕТ • Но: – Прототипирование автотестов – Исследовательское тестирование • При CD тесты… – выполняются после автоматического QA – встраиваются в Delivery Pipeline – максимально автоматизированы 45
  46. 46. ©2016CloudBees,Inc.AllRightsReserved 46 Пример. Интерактивные шаги // Сборка проекта из репозитория // Инициализация тестового прогона в TestRail для QA // Автотесты, репортинг, деплой на staging-сервер // Отправить уведомления ручным тестировщикам echo ’Automatic tests passed’ hipchatSend('@QATeam The build ' + buildVersion + ' has been staged: ' + stagingURL + '. Please Test it and report back to ' + build.url + '. TestRail run is here: ' + testRailRunURL) // Подождать, пока QA подтвердят релиз input message: 'Have manual spot-checks passed? Ready to release?' // Релиз и нотификации mail to: "dream_team@cloudbees.com", subject: "Dream Product - build is released", body: "Hi there, The new build of the product has been released. Link:» + artifactoryLink ~~~~~~Много кода~~~~~~ ~~~~~~Много кода~~~~~~
  47. 47. ©2016CloudBees,Inc.AllRightsReserved Pipeline в CloudBees Jenkins Platform • Частичный Continuous Delivery • Около 100 внутренних модулей + open-source • Тысячи сборок в день • У нас нет тестировщиков (только SDET) • Что мы автоматизируем? – Проверка pull-request’ов, validated Merge – Релизы (компоненты, инсталляторы) – CD документации на сайты – Интеграция компонентов (ночные сборки) – Деплой на staging 47
  48. 48. ©2016CloudBees,Inc.AllRightsReserved Pipeline в CloudBees Jenkins Platform • Что сделали? – Весь код в SCM, минимальные настройки проектов – Внутренняя библиотека Pipeline – Pipeline Utility Steps • Чего добились? – Релиз и staging одной кнопкой – Легко тестируем изменения в Build Flow – Более эффективная параллелизация UI-тестов oUI-тесты: 8 часов (на N машинах) => 1 час oРелиз основного модуля– 3 часа 48
  49. 49. ©2016CloudBees,Inc.AllRightsReserved • Jenkins 2.0 – … частично решает проблемы с UI/UX – … будет развиваться дальше • Pipeline as Code – … снижает затраты на поддержку автоматизации – … может быть применен для CD – … может быть применен для задач QA 49 Заключение
  50. 50. ©2016CloudBees,Inc.AllRightsReserved • Twitter: @jenkins_ru • Gitter: http://gitter.im/jenkinsci-ru – QA: использование и разработка Jenkins • Митапы: – Санкт-Петербург o http://www.meetup.com/St-Petersburg-Jenkins- Meetup/ – Москва – in progress o http://www.meetup.com/Moscow-Jenkins- Meetup/ – Минск (@KostyaSha, привет!) – CloudBees спонсирует митапы 50 Русскоязычное комьюнити Здесь может быть Ваше лого
  51. 51. ©2016CloudBees,Inc.AllRightsReserved • Jenkins: – Вебсайт: http://jenkins.io – Jenkins 2.0: https://jenkins-ci.org/2.0/ – Jenkins и CD: https://jenkins.io/solutions/pipeline/ • Pipeline-as-Code: – Документация: https://jenkins.io/doc/pipeline/ – Примеры: https://github.com/jenkinsci/pipeline-examples • CloudBees: – Вебсайт: https://www.cloudbees.com/ – CloudBees Jenkins Platform: https://www.cloudbees.com/products/cloudbees-jenkins-platform 51 Ссылки
  52. 52. ©2016CloudBees,Inc.AllRightsReserved©2015CloudBees,Inc.AllRightsReserved 52
  53. 53. ©2016CloudBees,Inc.AllRightsReserved Почему “автоматизации”? 53 Непрерывной Интеграции Continuous Integration Continuous Delivery DevOps Автоматизация бухучёта Home Automation CRON с WebUI
  54. 54. ©2016CloudBees,Inc.AllRightsReserved Почему “фреймворк”? 54 Система Гибок и расширяем Минимален «из коробки» Требует настройки
  55. 55. ©2016CloudBees,Inc.AllRightsReserved 55 Система Инфра- структура Доку- мен- тация Инфра- структура Конфиги Инфра- структура Шаб- лоны Система на базе Jenkins
  56. 56. ©2016CloudBees,Inc.AllRightsReserved • Multibranch Pipeline – тип задачи – В конфигурации – ссылка на репозиторий o Git/GitHub, BitBucket, … – Описание проекта - Jenkinsfile – Для всех веток – ОТДЕЛЬНЫЕ задачи в Jenkins o Сборки при коммитах o Независимые отчеты и Build History – [СКОРО] – Сборка pull-request’ов • (+) Multi-branch работает на уровне организаций в GitHub и BitBucket 56 Фичи Pipeline. Multibranch
  57. 57. ©2016CloudBees,Inc.AllRightsReserved 57 Multibranch Pipeline. Пример
  58. 58. ©2016CloudBees,Inc.AllRightsReserved 58 Pipeline. Шаги >100 шагов: • Интеграции с плагинами • Системные шаги • Дополнительные библиотеки
  59. 59. ©2016CloudBees,Inc.AllRightsReserved 59 Pipeline Remote Loader. Пример stage 'Load files from GitHub' def environment, helloworld fileLoader.withGit ('https://github.com/jenkinsci/workflow- remote-loader-plugin.git', 'master', null, '') { helloworld = fileLoader.load('examples/fileLoader/helloworld'); environment = fileLoader.load('examples/fileLoader/environment'); } stage 'Run methods from the loaded content' helloworld.printHello() environment.dumpEnvVars()

×