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

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

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.

Avatar for Oleg Nenashev

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