Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

http://sqadays.com/ru/talk/41426

Одной из проблем современной разработки продуктов является ускорение циклов тестирования, следующее из внедрения методологии Continuous Delivery (CD). Требования к качеству только увеличиваются, и большинство задач приходится решать посредством автоматизации и параллелизации задач.

На помощь приходят системы, которые до этого решали «лишь» задачу Continuous Integration. Jenkins является одним из наиболее популярных инструментов, поддерживающим множество средств тестирования. Появление Jenkins 2.0 в апреле 2016 во многом адресует смену фокуса на CD/DevOps и расширение возможностей применения инструмента.

В докладе будет рассказано о новых возможностях Jenkins 2.0, которые упрощают задачи как автоматического, так и ручного тестирования. Акцент будет сделан на технологию Pipeline, которая позволяет гибко описывать последовательные и параллельные процессы сборки, доставки и тестирования в продуктах. Будет приведён пример организации тестирования для одного из компонентов проекта Jenkins.

Oleg Nenashev

May 21, 2016
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

  1. ©  2016 CloudBees,   Inc.    All  Rights  Reserved ©

     2015  CloudBees,   Inc.    All  Rights  Reserved Jenkins 2.0: Организуем тестирование в составе Continuous Delivery Олег Ненашев, CloudBees, Inc.
  2. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •

    ~10 лет в R&D и автоматизации • Фокус: электроника и встраиваемое ПО – Intel, Sitronics, Synopsys • Развертывание и поддержка больших систем автоматизации • Автоматизация тестирования и QA 2 О себе. Бэкграунд @oleg_nenashev oleg-­‐nenashev onenashev
  3. ©  2016 CloudBees,   Inc.    All  Rights  Reserved О

    себе. Jenkins 3 @oleg_nenashev oleg-­‐nenashev onenashev •Проект Jenkins, Core team – Развитие ядра – Поддержка плагинов – Организатор митапов – Контакт для прессы в СНГ •Jenkins Developer в CloudBees – CloudBees – контрибьютор Jenkins – Помогаем строить enterprise-системы на базе Jenkins – CloudBees Jenkins Platform – Поддержка 24/7
  4. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Кто

    такой Jenkins? 4 • Сервер  автоматизации • Continuous  Integration • Continuous  Delivery • DevOps • … • Веб-­‐интерфейс • Распределенная  система • Open-­‐source  (MIT) https://jenkins.io Сборка Тестиро-­‐ вание Создание   пакетов Установка,   развер-­‐ тывание Построе-­‐ ние отчетов,   аналитика и  другое
  5. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Кто

    такой Jenkins • 2005: Появился как Hudson • 2008: Duke's Choice Award • 2011: Переименование в Jenkins • 2012: Самый популярный сервер непрерывной интеграции • 2015: >100к активных инсталляций • 2015: 1200 плагинов 5
  6. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Jenkins

    2.0 Выпущен  20  апреля 2016 https://jenkins-­‐ci.org/2.0/ 6
  7. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Jenkins

    2.0. А зачем? • Смена фокуса с CI в разработке софта – Continuous Delivery/Deployment – DevOps – Everything as Code • Проблемы User Experience в Jenkins – Сложность настройки системы и задач – Неполная документация – Интеграционные проблемы 7
  8. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Новый

    вебсайт •Изменение базового набора плагинов •Security-опции включены по-умолчанию •Улучшения UX: – Новый мастер установки – Улучшение страниц конфигурации задач – Категоризация задач •Pipeline as Code 8 Jenkins 2.0. Что внутри? http://bit.ly/jenkins20
  9. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Предыдущие

    доклады о Jenkins 2.0 •Митапы по Jenkins в Санкт-Петербурге – Инсайды по статусу разработки Jenkins 2.0 – О Jenkins в целом •QA: Conference – Jenkins 2.0 Что внутри? •Другие… 9 St.  Petersburg   Jenkins  Meetup @jenkins_spb
  10. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Сегодня…

    Continuous   Delivery 10 Disclaimer: • Презентация  не  является  тренингом • Презентация  отражает  личное  мнение  докладчика • Личное  мнение  докладчика  может  не  совпадать  с   позицией  компании или  сообщества  Jenkins • Ссылки  на  картинки  – в  бэкапе
  11. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Было.

    Непрерывная Интеграция 11 http://www.osp.ru/os/2008/06/5344965/
  12. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Было.

    Непрерывная Интеграция 12 Релиз Релиз-­‐ кандидат Основная  ветка Изменение  1 Изменение  2 Изменение  3 QA мало  QA мало  QA мало  QA
  13. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Они

    начинают раньше «работать» •Финансовый эффект достигается раньше Зачем доставлять изменения раньше? 14
  14. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Как

    не надо делать 15 Релиз Основная  ветка Изменение  1 Изменение  2 Изменение  3 мало  QA мало  QA мало  QA “Тяп-­‐ляп  и  в  продакшн” Исправляем… Исправляем…
  15. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Continuous

    Delivery 16 Релиз Основная  ветка Изменение  1 Изменение  2 Изменение  3 больше  QA больше  QA Больше  QA Быстрый   откат
  16. ©  2016 CloudBees,   Inc.    All  Rights  Reserved CD

    для инфраструктуры… • Инфраструктура: – критична для проектов – меняется вместе с кодом – должна тестироваться • Infrastructure As Code • DevOps 17
  17. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Короткие

    циклы разработки •Всегда дедлайн •Нет времени на юнит-тесты •Разбиение систем на модули CD для разработчиков… 18
  18. ©  2016 CloudBees,   Inc.    All  Rights  Reserved CD

    для контроля качества… •Короткие циклы верификации •Автоматизация всего: – Тестирование (все типы) – Статический анализ кода – Контроль совместимости модулей (N-1) – … •Надежность контроля – False negative опасны 19
  19. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Что

    нам нужно для CD? •Параллелизация (что можно) •Версионирование кода и процедур сборки •Воспроизводимость тестов и сборок – Чистое окружение для каждого прогона – Тесты сами подготавливают окружение •Тестирование на реальном релизе – Staging-репозитории релизов 20
  20. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Что

    нужно? Системы автоматизации! 21
  21. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Почему

    Jenkins? 22 Jenkins – Система   Непрерывной  Интеграции Фреймворк Автоматизации
  22. ©  2016 CloudBees,   Inc.    All  Rights  Reserved 23

    Интеграции >1200   плагинов Интеграция  с   сотнями  тулов Управление   процессами автоматизации Автоматизация   любых  задач Code  &  Commit Build  &  Config Scan  &  Test Release Deploy
  23. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Строим

    Delivery Pipeline. “Классический”подход •Failover – Naginator-плагин •Воспроизводимость – Чистое окружение – Одноразовые виртуальные машины 24 •Параллелизация – Matrix Project – Parameterized Trigger •Цепочки задач: – MultiJob plugin – Build Pipeline Plugin •Шаблонизация: – Template project – Inheritance plugin
  24. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Классические

    подходы Спагетти-­‐автоматизация • Зависимости   между  задачами • Трекинг   компонентов • Сложные   конфигурации • Дупликация • Сложность   поддержки • Ошибки
  25. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Pipeline

    as Code 27 Описание  процесса  сборки  в  виде  кода
  26. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Хранение

    [X] вместе с проектом •Отслеживание изменений •Тестирование [X] вместе с проектом [X] as code – часть Continuous Delivery Зачем оно нужно? 28 [X]  – Configuration,  Documentation,  Pipeline…  Everything!
  27. ©  2016 CloudBees,   Inc.    All  Rights  Reserved 29

    Automation as Code Job  DSL Pipeline  (бывш.  Workflow) По-­‐умолчанию  предлагается  в  Jenkins  2.0 Jenkins  Job  Builder Groovy Groovy YAML Ещё  несколько  плагинов…
  28. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Groovy

    DSL для описания задач •Тип задачи в Jenkins (Pipeline Job) •Open-source экосистема для X-as-code Что такое Jenkins Pipeline? 30
  29. ©  2016 CloudBees,   Inc.    All  Rights  Reserved 31

    Pipeline. Запуск скрипта из SCM • Синтаксис  на  базе  Groovy • Шаги  для  типовых  операций • Описания  задач  можно  хранить  в  SCM • Jenkinsfile – описание  задачи  в  корне  репозитория • Шаг  git()  заменяется  на  “checkout  scm” • http://bit.ly/pipeline-­‐tutorial
  30. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Pipeline

    Multibranch. Пример • Автоматическое  создание  задач  для  веток  и  pull-­‐request’ов • Независимые  репортинг и  история  сборок • Работает  на  уровне  организаций
  31. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •

    Генератор шаблонов в UI – Пользователь настраивает шаг сборки в UI – Jenkins генерирует код для Pipeline 33 Фичи Pipeline
  32. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Отображение

    последовательного Pipeline •CloudBees перевела проект в OSS 34 Фичи.Pipeline Stage View • Шаг  stage() • Логи для  отдельных   стадий  задачи • Интерактивные  шаги   интегрированы  в  UI
  33. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Фичи:

    Pipeline View Plugin • Другое представление Pipeline • Сейчас–релиз вне основного центра апдейтов 35
  34. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Pipeline

    не привязан к конкретной ноде •Параллелизация – Команда parallel() – не нужны связки джобов •Множественные node() в одной задаче – => + parallel() – запуск тестов на разных машинах тестов на машинах •Множественные scm() в одной задаче •Интерактивные шаги 36 Специфика Pipeline
  35. ©  2016 CloudBees,   Inc.    All  Rights  Reserved 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']) } }  
  36. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •

    Устойчивость к рестарту мастера – Pipeline хранит контекст и продолжает задачу после рестарта • Шаг sh() – Durable Task Plugin – Устойчивость к разрывам сети • Failover в случае инфраструктурных проблем 38 Pipeline. Надежность инфраструктуры
  37. ©  2016 CloudBees,   Inc.    All  Rights  Reserved 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") } } } Пример  кода
  38. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Команда

    load() –загрузка Pipeline из файла •Pipeline Global Library Plugin – Входит в состав ядра Pipeline plugin – Создает Git-репозиторий в Jenkins – Предоставляет глобальные классы и переменные •Pipeline Remote Loader Plugin – Загрузка кода Pipeline из Git/GitHub 40 Фичи. Шаблонизация
  39. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Pipeline.

    Воспроизводимость • Staging-репозитории – Плагины/CLI для Nexus, Artifactory, TFS, … • «Чистые» окружения – Нативная поддержка виртуальных машин – Поддержка Cloud API Jenkins o AWS, EC2, Azure, Mesos, vSphere, Docker, … – Docker Pipeline Plugin 41
  40. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Docker

    Pipeline Plugin. Пример • Запуск задачи внутри контейнера: • Сборка и публикация образов: 42
  41. ©  2016 CloudBees,   Inc.    All  Rights  Reserved 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
  42. ©  2016 CloudBees,   Inc.    All  Rights  Reserved 44

    ЕСТЬ  ЛИ  РУЧНОЕ  ТЕСТИРОВАНИЕ В  CONTINUOUS  DELIVERY?
  43. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Ручное

    тестирование • На критическом пути – в идеале НЕТ • Но: – Прототипирование автотестов – Исследовательское тестирование • При CD тесты… – выполняются после автоматического QA – встраиваются в Delivery Pipeline – максимально автоматизированы 45
  44. ©  2016 CloudBees,   Inc.    All  Rights  Reserved 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:  "[email protected]",   subject:  "Dream  Product  -­‐ build  is  released",   body:  "Hi  there,  The  new  build  of  the  product  has  been  released.  Link:» +  artifactoryLink ~~~~~~Много   кода~~~~~~ ~~~~~~Много   кода~~~~~~
  45. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Pipeline

    в CloudBees Jenkins Platform • Частичный Continuous Delivery • Около 100 внутренних модулей + open-source • Тысячи сборок в день • У нас нет тестировщиков (только SDET) • Что мы автоматизируем? – Проверка pull-request’ов, validated Merge – Релизы (компоненты, инсталляторы) – CD документации на сайты – Интеграция компонентов (ночные сборки) – Деплой на staging 47
  46. ©  2016 CloudBees,   Inc.    All  Rights  Reserved Pipeline

    в CloudBees Jenkins Platform •Что сделали? – Весь код в SCM, минимальные настройки проектов – Внутренняя библиотека Pipeline – Pipeline Utility Steps •Чего добились? – Релиз и staging одной кнопкой – Легко тестируем изменения в Build Flow – Более эффективная параллелизация UI-тестов o UI-тесты: 8 часов (на N машинах) => 1 час o Релиз основного модуля– 3 часа 48
  47. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •Jenkins

    2.0 – … частично решает проблемы с UI/UX – … будет развиваться дальше •Pipeline as Code – … снижает затраты на поддержку автоматизации – … может быть применен для CD – … может быть применен для задач QA 49 Заключение
  48. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •

    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 Русскоязычное комьюнити Здесь  может   быть  Ваше  лого
  49. ©  2016 CloudBees,   Inc.    All  Rights  Reserved •

    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 Ссылки
  50. ©  2016 CloudBees,   Inc.    All  Rights  Reserved ©

     2015  CloudBees,   Inc.    All  Rights  Reserved 52