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

QA: Conference. Jenkins 2.0 for automation. What's inside? (Rus)

QA: Conference. Jenkins 2.0 for automation. What's inside? (Rus)

В апреле 2016 вышел в свет Jenkins 2.0 - мажорный релиз одного из наиболее популярных серверов автоматизации. В докладе рассказано об основных изменениях и новых возможностях, которые даёт этот релиз для задач автоматизации тестирования.

Oleg Nenashev

April 23, 2016
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

  1. Jenkins 2.0  для автоматизации тестирования.  Что внутри?   Москва,  23

    апреля  2016 Олег  Ненашев  (@oleg_nenashev) CloudBees,  Inc.
  2. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Проект  Jenkins,  Core  team

    •Ядро,  поддержка  плагинов •Митапы,  комьюнити •Jenkins  Developer  в  CloudBees •CloudBees  Jenkins  Platform •Бэкграунд:   •R&D  в  HW/Embedded  SW,  к.т.н. •Intel,  Sitronics,  Synopsys •Автоматизация  тестирования •Large-­‐scale  системы  CI/CD 2 >  whoami @oleg_nenashev oleg-­‐nenashev onenashev
  3. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Презентация  не  является  тренингом

    •Презентация  отражает  личное  мнение   докладчика •Личное  мнение  докладчика  может  не   совпадать  с  позицией  компании 3 Disclaimer
  4. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 Who  is  Mr.  Jenkins?

    Jenkins – Система   Непрерывной  Интеграции Сервер/Фреймворк Автоматизации 4
  5. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 Почему “автоматизации”?   Непрерывной

     Интеграции Continuous   Integration Continuous   Delivery DevOps Автоматизация   бухучёта Home   Automation CRON  с  WebUI 5
  6. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 6 Jenkins  101 >1000

      плагинов Интеграция  с   сотнями   инструментов Управление   процессами автоматизации Автоматизация   любых  задач Code  &  Commit Build  &  Config Scan  &  Test Release Deploy
  7. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 Jenkins 101 • 2005

     – Появление  Hudson  (Sun) • 2008  – Популяризация,  Duke's  Choice  Award • 2011  – Конфликт  с  Oracle,  форк Jenkins • 2012  – Jenkins-­‐самая  популярная  CI-­‐система • 2016  – Jenkins  2.0 • Лицензия:  MIT  (ядро) • Сайт:  https://jenkins.io • Гитхаб: https://github.com/jenkinsci/ 7
  8. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 Популярность  Jenkins http://stats.jenkins-­‐ci.org/jenkins-­‐stats/ •

    ~300   коммиттеров за  полгода • ~3  новых   плагина  в   неделю • ~30  релизов   плагинов  в   неделю Hudson Jenkins 8
  9. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 Почему  “фреймворк”? Система Гибок

     и  расширяем Минимален  «из  коробки» Требует  настройки 9
  10. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 Система Инфра-­‐ структура Доку-­‐

    мен-­‐ тация Инфра-­‐ структура Конфиги Инфра-­‐ структура Шаб-­‐ лоны Система  на   базе  Jenkins 10
  11. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •CloudBees  – контрибьютори  спонсор

     Jenkins •75%  разработки  идёт  в  open-­‐source •Мы  помогаем  строить  enterprise-­‐системы  на   базе  Jenkins – CloudBees  Jenkins  Platform •Горизонтальное  масштабирование  Jenkins •Фичи для  команд:  Templates,  RBAC •Мониторинг  и  аналитика •High  Availability •Поддержка  24/7 11 О  CloudBees
  12. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Смена  фокуса  с  CI

    в  разработке  софта •Continuous  Delivery •Continuous  Deployment •DevOps •Everything  as  Code •Централизация  систем  автоматизации •Коммерческие  решения 13 Тренды  систем  автоматизации
  13. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 14 Проблемы  UX Где

     найти  документацию? Как  найти/выбрать  плагин? А  этот плагин  вообще  живой? Как  ЭТО  настроить? Почему  мой  фикс  не  смотрят? Почему  UI  так  неудобен? Как  мне  ЭТО  реализовать?
  14. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 16 Масштабируемость  ограничена Нода

    1 Нода 2 Нода N .  .  . • Мастер  решает  большую  часть  задач • Удалённые  задачи  ВСЕГДА нагружают  мастер • Ввод-­‐вывод  на  мастере Multi-­‐ tenancy ??? Gearman CloudBees  Jenkins  Platform
  15. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 17 >5  лет  бинарной

     совместимости • Плагины  для  Hudson  2  ещё  работают! • НО: • Архитектурные  проблемы • Старые  библиотеки • Устаревший  UI,  не  обновить  зависимости • Интеграционные  проблемы  в  плагинах
  16. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 1  апреля  2010  –

    Блог  о  Hudson  2.0 Hudson 2.0 is expected to follow in the intrepid footsteps of other major revamps such as Netscape 5 and Perl 6 in its ambitiousness and innovation. Implementation of core in portable C for greater speed and code readability Revamped storage architecture around the Oracle 11g Database to provide more optimal synergy over flat XML files. https://jenkins-­‐ci.org/blog/2010/04/01/announcing-­‐the-­‐hudson-­‐2-­‐0-­‐roadmap/ Perl  6,  2016 Hudson  2.0,  ? 19
  17. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •…не  хотим  сломать  все

    •…  хотим  обеспечить  возможность   изменений  в  будущем •…  фокусируемся  на  UX  и  CD 20 В  Jenkins  2.0 мы…
  18. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •2015  – Jenkins  Office

     Hours  – обсуждение  планов •https://wiki.jenkins-­‐ci.org/display/JENKINS/Jenkins+2.0 •FOSDEM2016  – первые  демо Jenkins  2.0 •Jenkins  2.0  Contributor  Summit (1  февраля) •Митап:  http://bit.ly/jenkins2-­‐summit •Записки:  http://bit.ly/jenkins2-­‐summit-­‐notes •26  февраля  – приняты  в  Google  Summer  of  Code •http://bit.ly/1nyGCcW •28  февраля  – Первая  альфа-­‐версия Jenkins  2.0 21 Ключевые  события
  19. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 22 Планы Jenkins  1.x

    “Jenkins  2.x” Jenkins  2.0 Апрель  2016 Конец  2016  (?) • Веб-­‐сайт • Фокус  на  UX  и  инфраструктуре • Минимальные нарушения   совместимости • Архитектурные   изменения • Доработка  UX • Как  минимум  1  LTS-­‐линейка • 1.651.х  – до  июля  2016
  20. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Изменение  базового  набора  плагинов

      •Улучшения  UX: •Новый  мастер  установки •Улучшение  веб-­‐интерфейсов  (конфигии  пр.) •Категоризация  задач •Обновление  WebUI-­‐библиотек •Security-­‐опции  включены  по-­‐умолчанию •CSRF,  Slave-­‐2-­‐master  security •Jenkins  стартует  с  Matrix-­‐Based  Security •Pipeline as Code 23 Jenkins  2.0. Что  в  ядре? http://bit.ly/jenkins20
  21. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Февраль  29:  альфа-­‐версия •Март

     20 •Beta-­‐версия •Запуск  jenkins.io– новый  веб-­‐сайт •Апрель  6:   •Релиз-­‐кандидат •Сode  freeze  для  обеих  веток  (1.х  и  2.х) •Апрель  20: Релиз 24 План
  22. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Выпущен  20  апреля  2016

    •https://jenkins-­‐ci.org/2.0/ 25 Jenkins  2.0 Описание  и   ссылки  для   загрузки
  23. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Переезд  на  новый  домен:

     http://jenkins.io •Статический  web-­‐site,  исходники  на  GitHub
  24. 28 Редактирование  в   GitHub:  Markdown,   Asciidoc,  HAML Тут

     – всякие   панельки,   которые  мы   скоро   сломаем переработаем
  25. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Фокус  -­‐ Out  of

     the  Box  Experience •В  особенности  – страницы  настроек   и  управление  плагинами 30 Jenkins  2.0  UI
  26. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 Мастер  установки  Jenkins  2.0

     [2/2] При  выборе  пункта  – popup-­‐окно со   списком  зависимостей 32
  27. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 33 Изменение  набора  плагинов

    • Категоризация   элементов • Контекстная   справка Стандартные  типы: • CVS/SVN -­‐ замена   на Git/GitHub • Folders  плагин • Pipeline  плагин
  28. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Хранение  вместе  с  проектом

    •Отслеживание  изменений •Тестирование  вместе  с  проектом X as code. Зачем  оно  нужно? 36
  29. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 37 Automation  as  Code

    Job  DSL Pipeline  (бывш.  Workflow) По-­‐умолчанию  предлагается  в  Jenkins  2.0 Jenkins  Job  Builder Groovy Groovy YAML Ещё  несколько  плагинов…
  30. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Groovy  DSL  для  описания

     задач  Jenkins •Тип  задачи  в  Jenkins (Pipeline  Job) •Open-­‐source  экосистема  для  CD-­‐as-­‐code Что  такое  Pipeline? 38
  31. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 39 Pipeline.  Запуск  скрипта

     из  SCM • Синтаксис  на  базе  Groovy • Описания  задач  можно  хранить  в  SCM • Jenkinsfile – описание  задачи  в  корне  репозитория • Шаг  git()  заменяется  на  “checkout  scm” • http://bit.ly/pipeline-­‐tutorial
  32. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 40 Pipeline.  Шаги •

    Интеграции   с  плагинами • Системные  шаги • Дополнительные  библиотеки
  33. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Генератор  шаблонов  в  UI

    •Пользователь  настраивает  шаг  сборки  в  UI •Jenkins  генерирует  код  для  Pipeline 41 Фичи Pipeline
  34. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Параллелизация •Команда  parallel()  –

    не  нужны  связки  джобов •Множественные  node()  в  одной  задаче •=>  +  parallel()  – запуск  тестов  на  разных  машинах   тестов  на  машинах •Множественные  scm()  в  одной  задаче •Интерактивные  шаги 42 Фичи Pipeline
  35. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 43 Пример.  Параллельные  тесты

    stage  'compile’ node  { checkout scm //  Checkout  репозитория,  где  находится  Jenkinsfile sh "./gradlew clean compileJava" stash excludes: 'build/',  includes: '**',  name: 'source' } 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. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 44 Пример.  Интерактивные  шаги

    // Сборка проекта  из  репозитория //  Инициализация прогона в 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 ~~~~~~Много   кода~~~~~~ ~~~~~~Много   кода~~~~~~
  37. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Устойчивость  к  рестарту  мастера

    •Pipeline  хранит  контекст  и  продолжает  задачу   после  рестарта •Шаг  sh()  – Durable  Task Plugin •Устойчивость  к  разрывам  сети •Безопасность: •Режим  Groovy  Sandbox  (Script  Security  Plugin) 45 Фичи Pipeline
  38. 46 Пример. 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,  который  вызывает   Ant } stage 'Build container' def whale =  docker.build("${imageName}:${imageTag}”) stage 'Deploy container' whale.push() } https://github.com/jenkins-­‐infra/ircbot
  39. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Отображение  последовательного  Pipeline •CloudBees

     перевела  проект  в  OSS 48 Фичи. Pipeline  Stage  View • stage() • Логи для  отдельных   стадий  задачи • Интерактивные  шаги   интегрированы  в  UI
  40. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Multibranch Pipeline – тип

     задачи •В  конфигурации  –ссылка  на  репозиторий   •Git/GitHub,  BitBucket,  … •Описание  проекта  -­‐ Jenkinsfile •Для  всех  веток  – ОТДЕЛЬНЫЕзадачи  в  Jenkins •Сборки  при  коммитах •Независимые  отчеты  и  Build  History •[СКОРО] – Сборка  pull-­‐request’ов •(+)  Multi-­‐branch  работает  на  уровне  организаций   в  GitHub и  BitBucket 49 Фичи Pipeline. Multibranch
  41. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Команда  load()  –загрузка Pipelineиз

     файла •CPS  Global  library •Входит  в  состав  ядра  Pipeline  plugin •Создает  Git-­‐репозиторий  в  Jenkins •Глобальные  функции,  классы,  переменные,  … •Pipeline  Remote  Loader • https://github.com/jenkinsci/workflow-­‐remote-­‐loader-­‐plugin •Загрузка  кода  Pipeline  из  Git/GitHub •Логика  плагина  написана  на  Pipeline 52 Фичи.  Шаринг кода  между  задачами
  42. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 53 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()
  43. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Совместимость  с  плагинами •Подсветка

     кода/документация  Pipeline  в  IDE •Графический  редактор  в  UI  Jenkins 54 Скоро…
  44. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •«Красивая»  интеграция  -­‐ не

     у  всех  плагинов •Список  поддерживаемых  плагинов:   •http://bit.ly/pipeline-­‐compatibility •Последний  довод: 55 Совместимость
  45. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Что  есть  сейчас? •Подсветка

     синтаксиса •IntellijIDEA  – GDSL •Eclipse  DSLD  – PoC – почти  работает •Контекстная  справка  по  шагам  – TODO •Отладчик  -­‐ TODO 56 Скоро:  Интеграция  в  IDE
  46. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 • Ещё  одна  визуализация

     процесса  сборки • Доступен  через  экспериментальный  UC 58 Pipeline  View  Plugin https://github.com/jenkinsci/pipeline-­‐view-­‐plugin Автор  -­‐ @bsideup
  47. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Jenkins  2.0   •…

     частично  решает  проблемы  с  UI/UX •…  будет  развиваться  дальше  в  направлении  UX •…  содержит  новый  движок  для  автоматизации   задач  (Pipeline-­‐as-­‐Code) •Pipeline  as  Code  полезен  для  QA 59 Заключение
  48. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Twitter:  @jenkins_ru •Gitter:  http://gitter.im/jenkinsci-­‐ru

    •Митапы: •Санкт-­‐Петербург • http://www.meetup.com/St-­‐Petersburg-­‐Jenkins-­‐Meetup/ •Москва  – in  progress • http://www.meetup.com/Moscow-­‐Jenkins-­‐Meetup/ •Минск  (@KostyaSha,  привет!) •CloudBees  спонсирует  митапы 60 Русскоязычное  комьюнити Здесь  может   быть  Ваше  лого
  49. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 •Jenkins:  http://jenkins.io •Jenkins  2.0:

     https://jenkins-­‐ci.org/2.0/ •Туториал по  Pipeline-­‐as-­‐Code: • https://github.com/jenkinsci/workflow-­‐ plugin/blob/master/TUTORIAL.md •CloudBees:  https://www.cloudbees.com/ •CloudBees  Jenkins  Platform:   https://www.cloudbees.com/products/cloudbees-­‐ jenkins-­‐platform 61 Ссылки
  50. @oleg_nenashev,  @cloudbees 2.0 QA: Conference,  23.04.2016 Q  &  A Contacts:

    • E-­‐mail:  [email protected] • Gitter:  /oleg-­‐nenashev • Twitter:  @oleg_nenashev