Slide 1

Slide 1 text

St.  Petersburg   Jenkins  Meetup @jenkins_spb Jenkins 2.0  и  Pipeline-­‐as-­‐Code.   Что  происходит  в  проекте? Санкт-­‐Петербург,  10  марта  2016 Олег  Ненашев  (@oleg_nenashev) CloudBees,  Inc.

Slide 2

Slide 2 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Jenkins OSS,  Core  team •Jenkins  Developer  в  CloudBees •CloudBees  Jenkins  Platform •Саппорт/Консалтинг •Бэкграунд:   •R&D  в  HW/Embedded  SW,  к.т.н. •Intel,  Sitronics,  Synopsys •Разработка  и  поддержка  large-­‐scale  CI-­‐ инфраструктуры   2 >  whoami @oleg_nenashev oleg-­‐nenashev

Slide 3

Slide 3 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Опыт  работы  с  Hudson/Jenkins   – 8  лет •Open-­‐source  contribution  – 4  года • Свои  плагины:  Ownership,  Job  Restrictions, … • Легаси:  Role  Strategy,  Custom  Tools,  Promoted  Builds • Команды  Core  &  Security  в  Jenkins • Мейнтейнер Windows  Service  Wrapper  и  Remoting •Организатор  митапа по  Jenkins  в  СПб: • http://www.meetup.com/St-­‐Petersburg-­‐Jenkins-­‐Meetup/ •Куратор  Jenkins  в  Google  Summer  of  Code  2016 3 >  whoami –v  jenkins –m  oss

Slide 4

Slide 4 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Презентация  не  является  тренингом •Презентация  отражает  личное  мнение   докладчика •Личное  мнение  докладчика  может  не   совпадать  с  позицией  компании 4 Disclaimer

Slide 5

Slide 5 text

2.0 В  предыдущих  сериях… ПОЧЕМУ  JENKINS  2.0? https://events.yandex.ru/lib/talks/3302/ Доклад  на  прошлом  митапе:

Slide 6

Slide 6 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Смена  фокуса  с  CI в  разработке  софта •Continuous  Delivery •Continuous  Deployment •DevOps •Централизация  систем  автоматизации •Коммерческие  решения 6 Тренды  систем  автоматизации

Slide 7

Slide 7 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 7 Проблемы  UX Где  найти  документацию? Как  найти/выбрать  плагин? А  этот плагин  вообще  живой? Как  ЭТО  настроить? Почему  мой  фикс  не  смотрят? Почему  UI  неудобен? Как  мне  это  реализовать?

Slide 8

Slide 8 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 8 Кривая  обучения Скрипты,  CRON Плагины Advanced-­‐фичи, Свои  плагины

Slide 9

Slide 9 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 9 Масштабируемость  ограничена Нода 1 Нода 2 Нода N .  .  . • Мастер  решает  большую  часть  задач • Удалённые  задачи  ВСЕГДА нагружают  мастер • Ввод-­‐вывод  на  мастере Multi-­‐ tenancy ??? Gearman CloudBees  Jenkins  Platform

Slide 10

Slide 10 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 10 Проблемы  роста  проекта Использование  Jenkins  росло  быстрее  сообщества  

Slide 11

Slide 11 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 11 >5  лет  бинарной  совместимости • Плагины  для  Hudson  2  ещё  работают! • НО: • Архитектурные  проблемы • Старые  библиотеки • Устаревший  UI • Интеграционные  проблемы  в  плагинах

Slide 12

Slide 12 text

2.0 Jenkins  2.0.  Предыстория 12

Slide 13

Slide 13 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  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,  ?

Slide 14

Slide 14 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •…не  хотим  сломать  все •…  хотим  обеспечить  возможность   изменений  в  будущем •…  фокусируемся  на  UX  и  CD 14 В  Jenkins  2.0 мы…

Slide 15

Slide 15 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  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  февраля  – Jenkins  в  Google  Summer  of  Code •http://bit.ly/1nyGCcW •28  февраля  – Первая  альфа-­‐версия 15 Ключевые  события

Slide 16

Slide 16 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •FOSDEM2016  – первые  демо Jenkins  2.0 •Jenkins  2.0  Contributor  Summit (1  февраля) • >20  разработчиков  Jenkins •Митап:  http://bit.ly/jenkins2-­‐summit •Записки:  http://bit.ly/jenkins2-­‐summit-­‐notes •Новые  планы •Ревью направлений  на  Jenkins  2.x 16 Ключевые  события

Slide 17

Slide 17 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Jenkins  принят  в  Google  Summer  of  Code •http://bit.ly/jenkins-­‐gsoc-­‐wiki •Фокус  – Jenkins  2.0 +  UX •9  основный  направлений  (“идей”) •15 менторов •В  т.ч.  @oleg_nenashev  и  @lanwen 17 Ключевые  события Студентам:  Заявки  на  участие  подаются  с  17  по   24  марта!  http://bit.ly/jenkins-­‐gsoc-­‐apply

Slide 18

Slide 18 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 18 Исходные  планы,  2015г. Jenkins  1.x “Jenkins  N.x” Jenkins  2.x Середина  2016 Конец  2016  (?) • Веб-­‐сайт • Фокус  на  UX  и  инфраструктуре • Минимальные нарушения   совместимости • Архитектурные   изменения • Как  минимум  1  LTS-­‐линейка

Slide 19

Slide 19 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •В  Jenkins  2.0  мы  выкатываем  минимально   необходимый  набор  изменений •Мы  не  ломаем  обратную  совместимость  в   Jenkins  2.0 •Jenkins  2.x  будет  «размазан»  на  полгода 19 Новый  план,  февраль  2016

Slide 20

Slide 20 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Улучшения  UX: •“Plugin  gallery” •Новый  мастер  установки •Улучшение  веб-­‐интерфейсов  (конфиги и  пр.) •Обновление  WebUI-­‐библиотек •Security-­‐опции  включены  по-­‐умолчанию •Pipeline-­‐as-­‐Code •Механизм  устаревания  и  удаления  API •Будет  позже 20 Jenkins  2.0. Что  в  ядре? http://bit.ly/jenkins20

Slide 21

Slide 21 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Февраль  29:  альфа-­‐версия •Март  16:  "feature  complete”,  бета-­‐версия,   массовое  тестирование •Март  23:  Релиз-­‐кандидат,  запуск  jenkins.io   •Март  30:  (или  позже)  – Релиз 21 План

Slide 22

Slide 22 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Не  все  бренчи  интегрированы,  stay  tuned! •Регулярные  релизы  альфа-­‐версии •https://jenkins-­‐ci.org/2.0/ 22 Jenkins  2.0.  Альфа  версия Ссылки  для  загрузки

Slide 23

Slide 23 text

2.0 Jenkins  2.0  website 23

Slide 24

Slide 24 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Переезд  на  новый  домен:  http://jenkins.io •Статический  web-­‐site,  исходники  на  GitHub ⇒Проще  управлять  контентом  (CD!) ⇒Любой  может  прислать  pull-­‐request •Переработка  контента •Структурирование  информации •БОЛЬШЕ информации •Выход  за  пределы  Continuous  Integration 24 Jenkins  2.0.  Веб-­‐сайт http://bit.ly/jenkins20

Slide 25

Slide 25 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Статический  сайт  – DONE •Домен  и  новая  верстка  – TODO •Локализация  -­‐ TODO •Контент  – Work-­‐in-­‐progress 25 Статус

Slide 26

Slide 26 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 26 Новый  веб-­‐сайт  (http://jenkins.io)

Slide 27

Slide 27 text

27 Редактирование  в   GitHub:  Markdown,   Asciidoc,  HAML Тут  – всякие   панельки,   которые  мы   скоро   сломаем переработаем

Slide 28

Slide 28 text

Страницы  решений  по  областям

Slide 29

Slide 29 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 Хотелки на  будущее •Больше  документации •“Страницы  решений” на  сайте •CloudBees  переносит  Jenkins  Handbook  в  OSS •Централизация  документации  на  плагины •«Галерея  плагинов»  

Slide 30

Slide 30 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Фокус  -­‐ Out  of  the  Box  Experience •В  особенности  – конфиги и   управление  плагинами 30 Jenkins  2.0  UI

Slide 31

Slide 31 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 Setup  Wizard

Slide 32

Slide 32 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 Меню  выбора  плагинов  в  alpha-­‐2 32 При  выборе  пункта  – popup-­‐окно со   списком  зависимостей

Slide 33

Slide 33 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 33 Update  Manager  2.0.  Концепт

Slide 34

Slide 34 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 34 Страница  настройки  задач.  Tabs Вкладки

Slide 35

Slide 35 text

2.0 Pipeline  as  code ОПИСАНИЕ   ПРОЦЕССА   СБОРКИ  В  ВИДЕ  КОДА 35

Slide 36

Slide 36 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Хранение  вместе  с  проектом •Отслеживание  изменений Зачем  оно  нужно?

Slide 37

Slide 37 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 37 Automation  as  Code Job  DSL DotCI Pipeline  (бывш.  Workflow) Мы  хотим  иметь  его  ближе  к  ядру

Slide 38

Slide 38 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Groovy  DSL  для  описания  задач  Jenkins •Тип  задачи  в  Jenkins (Pipeline  Job) •Open-­‐source  экосистема  для  CD-­‐as-­‐code 38 Что  такое  Pipeline?

Slide 39

Slide 39 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 39 Pipeline.  Пример  №1 • Синтаксис  на  базе  Groovy • Описания  задач  можно  хранить  в  SCM • Jenkinsfile • http://bit.ly/pipeline-­‐tutorial

Slide 40

Slide 40 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 40 Пример  Jenkinsfile

Slide 41

Slide 41 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 41 Pipeline.  Шаги • Интеграции  с  плагинами • Системные  шаги • Дополнительные  библиотеки

Slide 42

Slide 42 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Генератор  шаблонов  в  UI •Пользователь  настраивает  шаг  сборки  в  UI •Jenkins  генерирует  код  для  Pipeline 42 Фичи Pipeline

Slide 43

Slide 43 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Параллелизация •Команда  parallel()  – не  нужны  связки  джобов •Множественные  node()  в  одной  задаче •Множественные  scm()  в  одной  задаче •Интерактивные  шаги 43 Фичи Pipeline

Slide 44

Slide 44 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Устойчивость  к  рестарту  мастера •Pipeline  хранит  контекст  и  продолжает  задачу   после  рестарта •На  слейвах – Durable  Task Plugin •Безопасность: •Режим  Groovy  Sandbox  (Script  Security  Plugin) 44 Фичи Pipeline

Slide 45

Slide 45 text

45 Pipeline.  Пример  №2.  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

Slide 46

Slide 46 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 46 Pipeline:  Ещё  примеры https://github.com/jenkinsci/ pipeline-­‐examples

Slide 47

Slide 47 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Multi-­‐Branch  Pipeline  Plugin •В  конфигурации  задачи  – ссылка  на   репозиторий   (Git/GitHub,  BitBucket,  …) •Jenkins  берёт  настройки  из  Jenkinsfile •Для  всех  бренчей Jenkins  создает  ОТДЕЛЬНЫЕ   задачи  со  сборками  при  коммитах и  репортингом •[СКОРО] – Сборка  pull-­‐request’ов •(+)  Тоже  самое  на  уровне  организаций  в   GitHub и  BitBucket 47 Фичи Pipeline. Multi-­‐Branch

Slide 48

Slide 48 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 Multibranch Pipeline.   Пример  конфигурации 48

Slide 49

Slide 49 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •load()  – базовая  команда  загрузки  из  файла •CPS  Global  library • Входит  в  состав  ядра  Pipeline  plugin • Создает  Git-­‐репозиторий в  Jenkins • Определяет  глобальные  функции,  классы  и   переменные •Pipeline  Remote  Loader • https://github.com/jenkinsci/workflow-­‐remote-­‐loader-­‐plugin • Загрузка  кода  Pipeline  из  Git/GitHub • Логика  плагина  написана  на  Pipeline 49 Фичи.  Шаринг кода  между  задачами

Slide 50

Slide 50 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 50 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()

Slide 51

Slide 51 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Совместимость  с  плагинами •Pipeline  Stage  view •Подсветка  кода/документация  Pipeline  в  IDE •Графический  редактор  в  UI  Jenkins 51 Скоро…

Slide 52

Slide 52 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •«Красивуя»  интеграция  -­‐ не  у  всех  плагинов •Список  поддерживаемых  плагинов:   •http://bit.ly/pipeline-­‐compatibility •Если  не  хватает  интеграций: 52 Совместимость

Slide 53

Slide 53 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 • CloudBees  переводит  проект  в  OSS • Бета-­‐версия  доступна  в  экспериментальном  апдейт-­‐центре 53 Скоро:  Pipeline   Stage  View • Stage() • Логи для  отдельных   стадий  задачи

Slide 54

Slide 54 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Что  есть  сейчас? •Подсветка  синтаксиса •Intellij IDEA  – GDSL •Eclipse  DSLD  – PoC – почти  работает •Контекстная  справка  по  шагам  – TODO 54 Скоро:  Интеграция  в  IDE

Slide 55

Slide 55 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 55 Графический  Редактор  Pipeline https://github.com/jenkinsci/pipeline-­‐editor-­‐plugin

Slide 56

Slide 56 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Pipeline  Debugger •Поддержка  мульти-­‐ конфигурационных  проектов 56 В  далеких  планах…

Slide 57

Slide 57 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Вебсайт  Jenkins:  https://jenkins-­‐ci.org •Прототип  нового  сайта:  http://jenkins.io •Jenkins  2.0:  https://jenkins-­‐ci.org/2.0/ •Русскоязычные  ресурсы: •Gitter:  https://gitter.im/jenkinsci-­‐ru/public •Twitter  – @jenkins_ru   •Туториал по  Pipeline-­‐as-­‐Code: •https://github.com/jenkinsci/workflow-­‐ plugin/blob/master/TUTORIAL.md 57 Ссылки

Slide 58

Slide 58 text

@oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 Q  &  A Contacts: • E-­‐mail:  [email protected] • Gitter:  /oleg-­‐nenashev • Twitter:  @oleg_nenashev