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

SPb Jenkins Meetup #1 - Jenkins 2.0 и Pipeline-As-Code (Rus)

SPb Jenkins Meetup #1 - Jenkins 2.0 и Pipeline-As-Code (Rus)

В предыдущей презентации я рассказывал о проекте Jenkins и о шагах, которые предпринимает сообщество для улучшения для улучшения пользовательского опыта (https://speakerdeck.com/onenashev/spb-jenkins-meetup-number-1-intro-rus)

Эта презентация посвящена Jenkins 2.0, которое разрабатывается комьюнити. Рассмотрены основные изменения, которые будут доступны в 2.0. В отдельности рассмотрен Pipeline-As-Code, которая является ключевой для реализации задач Continuous Delivery в Jenkins.

Oleg Nenashev

March 10, 2016
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

  1. St.  Petersburg   Jenkins  Meetup @jenkins_spb Jenkins 2.0  и  Pipeline-­‐as-­‐Code.

      Что  происходит  в  проекте? Санкт-­‐Петербург,  10  марта  2016 Олег  Ненашев  (@oleg_nenashev) CloudBees,  Inc.
  2. @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
  3. @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
  4. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Презентация  не  является  тренингом

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

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

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

     CRON Плагины Advanced-­‐фичи, Свои  плагины
  8. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 9 Масштабируемость  ограничена Нода

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

    Использование  Jenkins  росло  быстрее  сообщества  
  10. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 11 >5  лет  бинарной

     совместимости • Плагины  для  Hudson  2  ещё  работают! • НО: • Архитектурные  проблемы • Старые  библиотеки • Устаревший  UI • Интеграционные  проблемы  в  плагинах
  11. @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,  ?
  12. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •…не  хотим  сломать  все

    •…  хотим  обеспечить  возможность   изменений  в  будущем •…  фокусируемся  на  UX  и  CD 14 В  Jenkins  2.0 мы…
  13. @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 Ключевые  события
  14. @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 Ключевые  события
  15. @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
  16. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 18 Исходные  планы,  2015г.

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

     выкатываем  минимально   необходимый  набор  изменений •Мы  не  ломаем  обратную  совместимость  в   Jenkins  2.0 •Jenkins  2.x  будет  «размазан»  на  полгода 19 Новый  план,  февраль  2016
  18. @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
  19. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Февраль  29:  альфа-­‐версия •Март

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

     stay  tuned! •Регулярные  релизы  альфа-­‐версии •https://jenkins-­‐ci.org/2.0/ 22 Jenkins  2.0.  Альфа  версия Ссылки  для  загрузки
  21. @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
  22. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Статический  сайт  – DONE

    •Домен  и  новая  верстка  – TODO •Локализация  -­‐ TODO •Контент  – Work-­‐in-­‐progress 25 Статус
  23. 27 Редактирование  в   GitHub:  Markdown,   Asciidoc,  HAML Тут

     – всякие   панельки,   которые  мы   скоро   сломаем переработаем
  24. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 Хотелки на  будущее •Больше

     документации •“Страницы  решений” на  сайте •CloudBees  переносит  Jenkins  Handbook  в  OSS •Централизация  документации  на  плагины •«Галерея  плагинов»  
  25. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Фокус  -­‐ Out  of

     the  Box  Experience •В  особенности  – конфиги и   управление  плагинами 30 Jenkins  2.0  UI
  26. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 Меню  выбора  плагинов  в

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

    •Отслеживание  изменений Зачем  оно  нужно?
  28. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 37 Automation  as  Code

    Job  DSL DotCI Pipeline  (бывш.  Workflow) Мы  хотим  иметь  его  ближе  к  ядру
  29. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Groovy  DSL  для  описания

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

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

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

    •Пользователь  настраивает  шаг  сборки  в  UI •Jenkins  генерирует  код  для  Pipeline 42 Фичи Pipeline
  33. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Параллелизация •Команда  parallel()  –

    не  нужны  связки  джобов •Множественные  node()  в  одной  задаче •Множественные  scm()  в  одной  задаче •Интерактивные  шаги 43 Фичи Pipeline
  34. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Устойчивость  к  рестарту  мастера

    •Pipeline  хранит  контекст  и  продолжает  задачу   после  рестарта •На  слейвах – Durable  Task Plugin •Безопасность: •Режим  Groovy  Sandbox  (Script  Security  Plugin) 44 Фичи Pipeline
  35. 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
  36. @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
  37. @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 Фичи.  Шаринг кода  между  задачами
  38. @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()
  39. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Совместимость  с  плагинами •Pipeline

     Stage  view •Подсветка  кода/документация  Pipeline  в  IDE •Графический  редактор  в  UI  Jenkins 51 Скоро…
  40. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •«Красивуя»  интеграция  -­‐ не

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

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

     синтаксиса •Intellij IDEA  – GDSL •Eclipse  DSLD  – PoC – почти  работает •Контекстная  справка  по  шагам  – TODO 54 Скоро:  Интеграция  в  IDE
  43. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 •Pipeline  Debugger •Поддержка  мульти-­‐

    конфигурационных  проектов 56 В  далеких  планах…
  44. @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 Ссылки
  45. @oleg_nenashev,  @jenkins_spb 2.0 10  марта  2016 Q  &  A Contacts:

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