Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

©  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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

©  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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

©  2016 CloudBees,   Inc.    All  Rights  Reserved 13

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

©  2016 CloudBees,   Inc.    All  Rights  Reserved Что делать? 26

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

©  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']) } }  

Slide 38

Slide 38 text

©  2016 CloudBees,   Inc.    All  Rights  Reserved • Устойчивость к рестарту мастера – Pipeline хранит контекст и продолжает задачу после рестарта • Шаг sh() – Durable Task Plugin – Устойчивость к разрывам сети • Failover в случае инфраструктурных проблем 38 Pipeline. Надежность инфраструктуры

Slide 39

Slide 39 text

©  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") } } } Пример  кода

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

©  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

Slide 42

Slide 42 text

©  2016 CloudBees,   Inc.    All  Rights  Reserved Docker Pipeline Plugin. Пример • Запуск задачи внутри контейнера: • Сборка и публикация образов: 42

Slide 43

Slide 43 text

©  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

Slide 44

Slide 44 text

©  2016 CloudBees,   Inc.    All  Rights  Reserved 44 ЕСТЬ  ЛИ  РУЧНОЕ  ТЕСТИРОВАНИЕ В  CONTINUOUS  DELIVERY?

Slide 45

Slide 45 text

©  2016 CloudBees,   Inc.    All  Rights  Reserved Ручное тестирование • На критическом пути – в идеале НЕТ • Но: – Прототипирование автотестов – Исследовательское тестирование • При CD тесты… – выполняются после автоматического QA – встраиваются в Delivery Pipeline – максимально автоматизированы 45

Slide 46

Slide 46 text

©  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 ~~~~~~Много   кода~~~~~~ ~~~~~~Много   кода~~~~~~

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

©  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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

©  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 Русскоязычное комьюнити Здесь  может   быть  Ваше  лого

Slide 51

Slide 51 text

©  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 Ссылки

Slide 52

Slide 52 text

©  2016 CloudBees,   Inc.    All  Rights  Reserved ©  2015  CloudBees,   Inc.    All  Rights  Reserved 52