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

Moscow Jenkins Meetup #3. Управляем конфигурациями Jenkins. Groovy-хуки и Configuration as Code Plugin

Moscow Jenkins Meetup #3. Управляем конфигурациями Jenkins. Groovy-хуки и Configuration as Code Plugin

Олег покажет, как можно с помощью Docker и Groovy Hook-скрипты управлять конфигурацией Jenkins и использовать возможности IDE при разработке (Демо). Он также расскажет о новом Configuration as Code Plugin, который находится в стадии ревью (JEP-201).

https://www.meetup.com/Moscow-Jenkins-Meetup/events/244507783/

Oleg Nenashev

November 24, 2017
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

  1. © 2017 CloudBees, Inc. All Rights Reserved. 2 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Обо мне @oleg_nenashev oleg-nenashev librecores.org Jenkins SPb Политех
  2. © 2017 CloudBees, Inc. All Rights Reserved. 3 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Oleg’s “Hall of Shame”(c) • Jenkins Core • Windows Service Wrapper • Плагины • Remoting
  3. © 2017 CloudBees, Inc. All Rights Reserved. 4 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk üGROOVY INIT SCRIPTS üLIVE-ДЕМО üCONFIGURATION AS CODE PLUGIN О чём доклад? Disclaimer: • Презентация отражает личное мнение докладчика • Оно может не совпадать с позицией сообщества Jenkins и/или CloudBees
  4. © 2017 CloudBees, Inc. All Rights Reserved. 5 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Configuration as Code в Jenkins Задачи Системные конфигурации
  5. © 2017 CloudBees, Inc. All Rights Reserved. 6 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Configuration as Code в Jenkins Задачи Системные конфигурации
  6. © 2017 CloudBees, Inc. All Rights Reserved. 7 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk “Infrastructure as Code” в Jenkins API для внешних тулов Jenkins CLI and REST API python- jenkins jenkins-client (java) Configuration Management Ansible, Chef, … Docker, Docker Compose ... Решения внутри проекта Jenkins Groovy Boot Hooks Scriptler Plugin SCM Sync Configuration
  7. © 2017 CloudBees, Inc. All Rights Reserved. 9 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Groovy Hooks • Где лежат скрипты*? • WEB-INF/HOOK.groovy в jenkins.war • WEB-INF/HOOK.groovy.d/*.groovy в jenkins.war • $JENKINS_HOME/HOOK.groovy • $JENKINS_HOME/HOOK.groovy.d/*.groovy • Для папок – выполнение а алфавитном порядке https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Hook+Script *HOOK = [init, boot]
  8. © 2017 CloudBees, Inc. All Rights Reserved. 10 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Пример https://github.com/oleg-nenashev/demo-jenkins-config-as-code
  9. © 2017 CloudBees, Inc. All Rights Reserved. 11 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Статическая конфигурация Jenkins • Основа: https://github.com/jenkinsci/docker • plugins.txt Docker • Конфигурация Jenkins • Конфигурация задач Groovy Init Hooks • Jenkinsfile в SCM • Organization Folder Pipeline
  10. © 2017 CloudBees, Inc. All Rights Reserved. 12 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Пример Intellij IDEA Filesystem SCM Plugin (alpha) • Документация • Отладка Тестовый Jenkins Source Code (local .git repos) • Configuration-as-Code • “Почти как Production” • Репозитории с библиотеками • Jenkinsfile JENKINS_HOME (volume)
  11. © 2017 CloudBees, Inc. All Rights Reserved. 14 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Чего не хватает • API Jenkins •Не хватает документации •Недостаточно публичных API => хаки • Groovy-классы • Обработка ошибок • Отладка в IDE
  12. © 2017 CloudBees, Inc. All Rights Reserved. 16 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Решаем проблемы • API Jenkins •Не хватает документации •Недостаточно публичных API • Groovy-классы • Обработка ошибок • Отладка в IDE GroovyBootstrap .groovy Запускаем Groovy-движок из… Groovy-скрипта
  13. © 2017 CloudBees, Inc. All Rights Reserved. 17 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk http://bit.ly/groovy-hook-bootstrap https://github.com/oleg-nenashev/demo- jenkins-config-as-code
  14. © 2017 CloudBees, Inc. All Rights Reserved. 18 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk •https://github.com/librecores/librecores-ci •Шаблоны контейнеров •Credentials •Генераторы задач •MultiBranch Pipeline Ещё примеры?
  15. © 2017 CloudBees, Inc. All Rights Reserved. 19 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Итого. Groovy-хуки • Отлично работает для статических конфигураций • Не хватает API и документации • Миграция/Откат… L • Обновление – кодом • Снэпшоты по версиям (?) • Откат – только через бэкап (storage)
  16. © 2017 CloudBees, Inc. All Rights Reserved. 21 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk “Infrastructure as Code” в Jenkins API для внешних тулов Jenkins CLI and REST API python- jenkins jenkins-client (java) Configuration Management Ansible, Chef, … Docker, Docker Compose ... Решения внутри проекта Jenkins Groovy Boot Hooks Scriptler Plugin SCM Sync Configuration
  17. © 2017 CloudBees, Inc. All Rights Reserved. 22 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Что было в 2016? • Нет рекомендованного сообществом решения • Configuration Management – вне проекта Jenkins • Отстают по фичам • Регрессии из-за секьюрити фиксов • Нет активных проектов
  18. © 2017 CloudBees, Inc. All Rights Reserved. 23 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk System Config DSL Plugin • Groovy DSL • https://github.com/jenkinsci/system- config-dsl-plugin • Начат Kohsuke Kawaguchi в 2015 • Статус: Заброшен • Форкнут в Praqma
  19. © 2017 CloudBees, Inc. All Rights Reserved. 24 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Configuration-as-Code Plugin • Разработка: Praqma и CloudBees • JEP-201 - два прототипа • Статус: DRAFT • https://github.com/jenkinsci/jep/tree/master/jep/201 • Прототипы: jenkinsci/configuration-as-code-plugin
  20. © 2017 CloudBees, Inc. All Rights Reserved. 25 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk JEP-201. Прототип 1 • Предыстория: • https://github.com/Praqma/JenkinsAsCodeReference • Docker + Docker Compose • Groovy хуки • Не хватало гибкости • Сложность описания/кастомизации • => Начали с форка System Config DSL Plugin
  21. © 2017 CloudBees, Inc. All Rights Reserved. 26 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk JEP-201. Прототип 1 Подход Описание: JSON Нужны Configurator-классы для типов Нужны патчи в плагинах или внешний плагин L https://github.com/jenkinsci/configuration-as-code- plugin/tree/praqma-prototype Разработчик: Ewelina Wilkosz (ewelinawilkosz2)
  22. © 2017 CloudBees, Inc. All Rights Reserved. 27 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk JEP-201. Прототип 1 НО: • Патчи для поддержки плагинов • JSON-схемы и генераторы классов (jsonschema2pojo) https://github.com/jenkinsci/configuration -as-code-plugin/tree/praqma-prototype
  23. © 2017 CloudBees, Inc. All Rights Reserved. 28 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk JEP-201. Прототип 2 Подход Описание в YAML Автогенерация синтаксиса для большинства плагинов, требуются патчи ядра (?) Точки расширения для частных случаев и старых плагинов (?) Генератор шаблонов (как в Pipeline) https://github.com/jenkinsci/configuration-as-code-plugin Предварительно выбран за основной вариант Разработчик: Nicolas de Loof (ndeloof)
  24. © 2017 CloudBees, Inc. All Rights Reserved. 29 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk JEP-201. Прототип 2 Настройка LDAP
  25. © 2017 CloudBees, Inc. All Rights Reserved. 30 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk JEP-201. Прототип 2 Настройка Mailer
  26. © 2017 CloudBees, Inc. All Rights Reserved. 31 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk JEP-201. Итого • Находится в ранней стадии • Реализация - TBD • Будет совместим с Groovy-хуками • Средства разработки – непонятно…
  27. © 2017 CloudBees, Inc. All Rights Reserved. 32 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk JEP-201. Итого • Находится в ранней стадии • Реализация - TBD • Будет совместим с Groovy хуками • Средства разработки – непонятно… • Самое время контрибьютить ;) • https://groups.google.com/forum/#!forum/jenkinsci-dev • https://github.com/jenkinsci/configuration-as-code-plugin
  28. © 2017 CloudBees, Inc. All Rights Reserved. 33 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Takeaways • Groovy-хуки удобны для статических конфигураций • DSL, прямой доступ к API • Есть cредства разработки
  29. © 2017 CloudBees, Inc. All Rights Reserved. 34 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Takeaways • Groovy-хуки удобны для статических конфигураций • На вооружение: GroovyBootstrap ▸Поддержка классов ▸Отладка ▸Обработка ошибок ▸http://bit.ly/groovy-hook-bootstrap
  30. © 2017 CloudBees, Inc. All Rights Reserved. 35 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Takeaways • Groovy-хуки удобны для статических конфигураций • На вооружение: GroovyBootstrap • Groovy-хуки можно использовать в составе CM тулов, но аккуратно… ▸Апгрейд инстансов на лету затруднён ▸Откат только через бэкапы
  31. © 2017 CloudBees, Inc. All Rights Reserved. 36 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Takeaways • Groovy-хуки удобны для статических конфигураций • На вооружение: GroovyBootstrap • Groovy-хуки можно использовать в составе CM тулов, но аккуратно… • Нужно следить за JEP-201
  32. © 2017 CloudBees, Inc. All Rights Reserved. 37 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Контакты: E-mail: [email protected] GitHub: oleg-nenashev Twitter: @oleg_nenashev ВОПРОСЫ? go.cloudbees.com
  33. © 2017 CloudBees, Inc. All Rights Reserved. 38 @oleg_nenashev, @jenkins_ru,

    #jenkinsMsk Ссылки Демо на DockerHub • https://hub.docker.com/r/onenashev/demo-jenkins-config-as-code/ Примеры с груви-хуками • https://github.com/oleg-nenashev/demo-jenkins-config-as-code • https://github.com/librecores/librecores-ci • https://github.com/Praqma/JenkinsAsCodeReference Configuration-as-Code Plugin • https://github.com/jenkinsci/configuration-as-code-plugin • https://github.com/jenkinsci/jep/tree/master/jep/201