© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d©
201
5 Cl
oudB
ees,
Inc.
All
Righ
ts R
eser
ved
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryОлег Ненашев,CloudBees, Inc.
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
•~10 лет в R&D и автоматизации•Фокус: электроника и встраиваемое ПО– Intel, Sitronics, Synopsys
• Развертывание и поддержка больших систем автоматизации•Автоматизация тестирования и QA
2
О себе. Бэкграунд
@oleg_nenashev
oleg-nenashev
onenashev
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
3
О себе. Jenkins
@oleg_nenashev
oleg-nenashev
onenashev
•Проект Jenkins, Core team– Развитие ядра– Поддержка плагинов– Организатор митапов– Контакт для прессы в СНГ
• Jenkins Developer в CloudBees– CloudBees – контрибьютор Jenkins– Помогаем строить enterprise-системы на
базе Jenkins – CloudBees Jenkins Platform– Поддержка 24/7
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
Кто такой Jenkins?
4
• Сервер автоматизации• Continuous Integration• Continuous Delivery• DevOps• …
• Веб-интерфейс• Распределенная система
• Open-source (MIT)
https://jenkins.io
Сборка
Тестиро-вание
Создание пакетов
Установка, развер-тывание
Построе-ние
отчетов, аналитика
и другое
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
5
Кто такой Jenkins• 2005: Появился как Hudson• 2008: Duke's Choice Award
• 2011: Переименование в Jenkins
• 2012: Самый популярный сервер непрерывной интеграции
• 2015: >100к активных инсталляций
• 2015: 1200 плагинов
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
Jenkins 2.0Выпущен 20 апреля 2016https://jenkins-ci.org/2.0/
6
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
7
Jenkins 2.0. А зачем?•Смена фокуса с CI в разработке софта– Continuous Delivery/Deployment– DevOps– Everything as Code
•Проблемы User Experience в Jenkins– Сложность настройки системы и задач– Неполная документация– Интеграционные проблемы
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
•Новый вебсайт•Изменение базового набора плагинов •Security-опции включены по-умолчанию•Улучшения UX:– Новый мастер установки– Улучшение страниц конфигурации
задач– Категоризация задач
•Pipeline as Code8
Jenkins 2.0. Что внутри? http://bit.ly/jenkins20
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
9
Предыдущие доклады о Jenkins 2.0•Митапы по Jenkins в Санкт-Петербурге–Инсайды по статусу разработки
Jenkins 2.0–О Jenkins в целом
•QA: Conference– Jenkins 2.0 Что внутри?
•Другие…
St. Petersburg Jenkins Meetup@jenkins_spb
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
Сегодня…
Continuous Delivery
10
Disclaimer:• Презентация не является тренингом• Презентация отражает личное мнение докладчика• Личное мнение докладчика может не совпадать с
позицией компании или сообщества Jenkins• Ссылки на картинки – в бэкапе
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
11
Было. Непрерывная Интеграция
http://www.osp.ru/os/2008/06/5344965/
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
Было. Непрерывная Интеграция
12
РелизРелиз-
кандидатОсновная ветка
Изменение 1
Изменение 2
Изменение 3
QA
мало QA
мало QA
мало QA
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
13
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
•Они начинают раньше «работать»•Финансовый эффект достигается раньше
Зачем доставлять изменения раньше?
14
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
Как не надо делать
15
РелизОсновная ветка
Изменение 1
Изменение 2
Изменение 3
мало QA
мало QA
мало QA
“Тяп-ляп и в продакшн”
Исправляем…Исправляем…
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
Continuous Delivery
16
РелизОсновная ветка
Изменение 1
Изменение 2
Изменение 3
больше QA
больше QA
Больше QA
Быстрый откат
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
17
CD для инфраструктуры…
•Инфраструктура:– критична для проектов– меняется вместе с кодом– должна тестироваться
• Infrastructure As Code•DevOps
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
•Короткие циклы разработки•Всегда дедлайн•Нет времени на юнит-тесты•Разбиение систем на модули
CD для разработчиков…
18
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
19
CD для контроля качества…•Короткие циклы верификации•Автоматизация всего:– Тестирование (все типы)– Статический анализ кода– Контроль совместимости модулей (N-
1)–…
•Надежность контроля– False negative опасны
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
20
Что нам нужно для CD?•Параллелизация (что можно)•Версионирование кода и процедур сборки•Воспроизводимость тестов и сборок– Чистое окружение для каждого
прогона– Тесты сами подготавливают
окружение•Тестирование на реальном релизе– Staging-репозитории релизов
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
21
Что нужно?Системы автоматизации!
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
22
Почему Jenkins?
Jenkins – Система
Непрерывной Интеграции
ФреймворкАвтоматизации
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
23
Интеграции
>1200 плагинов
Интеграция с сотнями тулов
Управление процессами автоматизации
Автоматизация любых задач
Code & Commit Build & Config Scan & Test Release Deploy
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
24
Строим Delivery Pipeline. “Классический” подход
•Failover– Naginator-плагин
•Воспроизводимость– Чистое
окружение– Одноразовые
виртуальные машины
•Параллелизация– Matrix Project– Parameterized
Trigger•Цепочки задач:– MultiJob plugin– Build Pipeline Plugin
•Шаблонизация:– Template project– Inheritance plugin
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
Классические подходы
Спагетти-автоматизация
• Зависимости между задачами
• Трекинг компонентов
• Сложные конфигурации
• Дупликация
• Сложность поддержки
• Ошибки
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
26
Что делать?
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
27
Pipeline as CodeОписание процесса сборки в виде кода
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
28
•Хранение [X] вместе с проектом•Отслеживание изменений•Тестирование [X] вместе с проектом
[X] as code – часть Continuous DeliveryЗачем оно нужно?
[X] – Configuration, Documentation, Pipeline… Everything!
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
29
Automation as Code
Job DSL
Pipeline (бывш. Workflow)По-умолчанию предлагается в Jenkins 2.0
Jenkins Job Builder
Groovy
Groovy
YAML
Ещё несколько плагинов…
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
30
•Groovy DSL для описания задач•Тип задачи в Jenkins (Pipeline Job)•Open-source экосистема для X-as-code
Что такое Jenkins Pipeline?
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
31
Pipeline. Запуск скрипта из SCM
• Синтаксис на базе Groovy• Шаги для типовых операций• Описания задач можно хранить в SCM• Jenkinsfile – описание задачи в корне репозитория• Шаг git() заменяется на “checkout scm”
• http://bit.ly/pipeline-tutorial
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
Pipeline Multibranch. Пример• Автоматическое создание задач для веток и pull-request’ов• Независимые репортинг и история сборок• Работает на уровне организаций
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
• Генератор шаблонов в UI– Пользователь настраивает шаг сборки в UI– Jenkins генерирует код для Pipeline
33
Фичи Pipeline
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
•Отображение последовательного Pipeline •CloudBees перевела проект в OSS
34
Фичи. Pipeline Stage View
• Шаг stage()• Логи для отдельных
стадий задачи• Интерактивные шаги
интегрированы в UI
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
35
Фичи: Pipeline View Plugin•Другое представление Pipeline•Сейчас–релиз вне основного центра апдейтов
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
•Pipeline не привязан к конкретной ноде
•Параллелизация– Команда parallel() – не нужны связки
джобов•Множественные node() в одной задаче–=> + parallel() – запуск тестов на
разных машинах тестов на машинах•Множественные scm() в одной задаче•Интерактивные шаги
36
Специфика Pipeline
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
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']) } }
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
• Устойчивость к рестарту мастера– Pipeline хранит контекст и продолжает
задачу после рестарта•Шаг sh() – Durable Task Plugin– Устойчивость к разрывам сети
• Failover в случае инфраструктурных проблем
38
Pipeline. Надежность инфраструктуры
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
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") } } }
Пример кода
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
•Команда load() –загрузка Pipeline из файла
•Pipeline Global Library Plugin– Входит в состав ядра Pipeline plugin– Создает Git-репозиторий в Jenkins– Предоставляет глобальные классы и
переменные
•Pipeline Remote Loader Plugin– Загрузка кода Pipeline из Git/GitHub 40
Фичи. Шаблонизация
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
41
Pipeline. Воспроизводимость•Staging-репозитории– Плагины/CLI для Nexus, Artifactory, TFS, …
•«Чистые» окружения– Нативная поддержка виртуальных машин– Поддержка Cloud API Jenkins
o AWS, EC2, Azure, Mesos, vSphere, Docker, …– Docker Pipeline Plugin
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
42
Docker Pipeline Plugin. Пример• Запуск задачи внутри контейнера:
• Сборка и публикация образов:
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
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
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
44
ЕСТЬ ЛИ РУЧНОЕ ТЕСТИРОВАНИЕВ CONTINUOUS DELIVERY?
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
45
Ручное тестирование•На критическом пути – в идеале НЕТ•Но: – Прототипирование автотестов– Исследовательское тестирование
•При CD тесты…– выполняются после автоматического
QA– встраиваются в Delivery Pipeline– максимально автоматизированы
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
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
~~~~~~Много кода~~~~~~
~~~~~~Много кода~~~~~~
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
47
Pipeline в CloudBees Jenkins Platform•Частичный Continuous Delivery•Около 100 внутренних модулей + open-source•Тысячи сборок в день•У нас нет тестировщиков (только SDET)
•Что мы автоматизируем?– Проверка pull-request’ов, validated Merge– Релизы (компоненты, инсталляторы)– CD документации на сайты– Интеграция компонентов (ночные сборки)– Деплой на staging
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
48
Pipeline в CloudBees Jenkins Platform•Что сделали?– Весь код в SCM, минимальные настройки
проектов– Внутренняя библиотека Pipeline– Pipeline Utility Steps
•Чего добились?– Релиз и staging одной кнопкой– Легко тестируем изменения в Build Flow– Более эффективная параллелизация UI-
тестовoUI-тесты: 8 часов (на N машинах) => 1 часoРелиз основного модуля– 3 часа
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
• Jenkins 2.0 – … частично решает проблемы с UI/UX– … будет развиваться дальше
•Pipeline as Code – … снижает затраты на поддержку
автоматизации– … может быть применен для CD– … может быть применен для задач QA
49
Заключение
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
• Twitter: @jenkins_ru•Gitter: http://gitter.im/jenkinsci-ru
– QA: использование и разработка Jenkins
•Митапы:– Санкт-Петербург
o http://www.meetup.com/St-Petersburg-Jenkins-Meetup/
– Москва – in progresso http://www.meetup.com/Moscow-Jenkins-Meetu
p/
– Минск (@KostyaSha, привет!)– CloudBees спонсирует митапы 50
Русскоязычное комьюнити
Здесь может быть Ваше лого
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
• 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
Ссылки
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d©
201
5 Cl
oudB
ees,
Inc.
All
Righ
ts R
eser
ved
52
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
53
Почему “автоматизации”?
Непрерывной Интеграции
Continuous IntegrationContinuous Delivery
DevOps
Автоматизация бухучётаHome Automation
CRON с WebUI
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
54
Почему “фреймворк”? Система
Гибок и расширяем
Минимален «из коробки»
Требует настройки
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
55
Система
Инфра-структура
Доку-мен-тация
Инфра-структура
Плагины Конфиги
Инфра-структура
Бэке
нд
Шаб-лоны
Система на базе Jenkins
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
• Multibranch Pipeline – тип задачи– В конфигурации – ссылка на репозиторий
o Git/GitHub, BitBucket, …– Описание проекта - Jenkinsfile– Для всех веток – ОТДЕЛЬНЫЕ задачи в Jenkins
o Сборки при коммитахo Независимые отчеты и Build History
– [СКОРО] – Сборка pull-request’ов
• (+) Multi-branch работает на уровне организаций в GitHub и BitBucket
56
Фичи Pipeline. Multibranch
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
57
Multibranch Pipeline. Пример
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
58
Pipeline. Шаги
>100 шагов:• Интеграции с плагинами• Системные шаги• Дополнительные библиотеки
© 2
016
Clou
dBee
s, In
c. A
ll Ri
ghts
Res
erve
d
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()