spb jenkins meetup #5. jenkins in da cloud. Внутренности
TRANSCRIPT
Jenkins in da cloud. Управление Jenkins в облаках(внутренности)
St. Petersburg Jenkins Meetup15 февраля 2017
© 2017 CloudBees, Inc. All Rights Reserved. 2
Обо мне
@oleg_nenashev
oleg-nenashev
© 2017 CloudBees, Inc. All Rights Reserved. 3
© 2017 CloudBees, Inc. All Rights Reserved. 4
А что у Вас? Приватные или публичные
облака?
© 2017 CloudBees, Inc. All Rights Reserved. 5
Jenkins – это Cloud-Native?
© 2017 CloudBees, Inc. All Rights Reserved. 6
НЕТ (ИМХО докладчика)
Disclaimer:Ø Презентация отражает личное мнение докладчикаØ Мнение докладчика может не совпадать с позицией
компании CloudBees и/или сообщества JenkinsØ Мнение докладчика может не совпадать с Вашим
мнением
© 2017 CloudBees, Inc. All Rights Reserved. 7
üЧТО ЕСТЬ В JENKINS?üЧЕГО НЕ ХВАТАЕТ?
О чём доклад?
© 2017 CloudBees, Inc. All Rights Reserved. 8
ИМХО автора. Jenkins – пока не Cloud-Native
• Появился до того, как клауды стали мейнстримом
• Архитектура ядра не была рассчитана на клауды
• Фичи – в плагинах
http://stats.jenkins-ci.org/jenkins-stats/
Hudson Jenkins
© 2017 CloudBees, Inc. All Rights Reserved. 9
ИМХО докладчика. Не Cloud-Native
9
IV
III
III CRON
wannabe
….
III+
© 2017 CloudBees, Inc. All Rights Reserved. 10
Хотелки
ØConfiguration as Code для системы
ØConfiguration as Code для задач
ØЗапуск в контейнерах
ØHigh Availability
ØВнешнее хранилище данных
© 2017 CloudBees, Inc. All Rights Reserved. 11
Хотелки
ØConfiguration as Code для системы
ØConfiguration as Code для задач
ØЗапуск в контейнерах
ØHigh Availability
ØВнешнее хранилище данных
© 2017 CloudBees, Inc. All Rights Reserved. 12
Configuration as Code в Jenkins
ЗадачиСистемные конфигурации
© 2017 CloudBees, Inc. All Rights Reserved. 13
Системные конфигурации… as Code
Внешние тулы
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
UnsafeJust examples…
© 2017 CloudBees, Inc. All Rights Reserved. 14
Jenkins 2 и External Configuration Management
© 2017 CloudBees, Inc. All Rights Reserved. 15
• Примеры…• chef-cookbooks/jenkins (Issue #466)• puppet-jenkins (Issue #575 )• python-jenkins• ansible-jenkins (not all implementations)• jenkinsci/docker (for a standard image)• …
• Сейчас…• System Property в ядре
Jenkins 2 и External Configuration Management
© 2017 CloudBees, Inc. All Rights Reserved. 16
Groovy Hooks
• Универсальное решение• Расширяемых механизм хуков
• init, boot-failure – в ядре
• Скрипты• WEB-INF/HOOK.groovy в jenkins.war• WEB-INF/HOOK.groovy.d/*.groovy в jenkins.war• $JENKINS_HOME/HOOK.groovy• $JENKINS_HOME/HOOK.groovy.d/*.groovy в lexical order
https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Hook+Script
© 2017 CloudBees, Inc. All Rights Reserved. 17
• Репозиторий для системных Groovy-скриптов
• Решаемые задачи:• Управление конфигурациями Jenkins• Управление ими… в рантайме• Кастомные шаги сборки
Scriptler Plugin
https://plugins.jenkins.io/scriptler
© 2017 CloudBees, Inc. All Rights Reserved. 18
Scriptler Plugin
• Внешние репозиториискриптов
• Приватные репозитории• Документация J
© 2017 CloudBees, Inc. All Rights Reserved. 19
Scriptler Plugin
© 2017 CloudBees, Inc. All Rights Reserved. 20
Итак, что нового?
© 2017 CloudBees, Inc. All Rights Reserved. 21
Итак, что нового?• Нет единого решения• Configuration Management –
вне проекта Jenkins• Нет активных проектов
© 2017 CloudBees, Inc. All Rights Reserved. 22
System Config DSL Plugin
• Groovy DSL• Source:
• https://github.com/jenkinsci/system-config-dsl-plugin
• Начат Kohsuke Kawaguchi в 2015• Статус:
• Работает для базовых задач• Заброшен(?)
© 2017 CloudBees, Inc. All Rights Reserved. 23
Хотелки
ØConfiguration as Code для системы
ØConfiguration as Code для задач
ØЗапуск в контейнерах
ØHigh Availability
ØВнешнее хранилище данных
© 2017 CloudBees, Inc. All Rights Reserved. 24
Описание задач в Jenkins … as Code
Job DSL
Pipeline (бывш. Workflow)
Jenkins Job Builder
Groovy
Groovy
YAML
Ещё несколько плагинов…
Предлагается по-умолчанию в Jenkins 2
© 2017 CloudBees, Inc. All Rights Reserved. 25
•Groovy DSL для описания задач•Тип задачи в Jenkins (Pipeline Job)•Open-source экосистема для X-as-code
25
Что такое Jenkins Pipeline?
© 2017 CloudBees, Inc. All Rights Reserved. 26
Специфика Pipeline
Описание всего процесса одной
задачей
© 2017 CloudBees, Inc. All Rights Reserved. 27
• Pipeline не привязан к конкретной ноде или рабочей директории
• Параллелизация• Команда parallel() – не нужны связки задач
• Множественные node() в одной задаче• => + parallel() – запуск тестов на разных машинах тестов на машинах
Специфика Pipeline
© 2017 CloudBees, Inc. All Rights Reserved. 28
Пример – Императивный Pipeline
28
• Синтаксис на базе Groovy• Шаги для типовых операций• Описания задач можно хранить в SCM
• Jenkinsfile – описание задачи в корне репозитория• Шаг git() заменяется на “checkout scm”
• http://bit.ly/pipeline-tutorial
© 2017 CloudBees, Inc. All Rights Reserved. 29
Пример – Декларативный Pipeline
© 2017 CloudBees, Inc. All Rights Reserved. 30
• Global CPS Library• Git внутри Jenkins
• Внешние библиотеки• Хранятся в SCM• Versioning
Библиотеки
© 2017 CloudBees, Inc. All Rights Reserved. 31
Больше о Pipeline
• Записи/слайды с предыдущих митапов• Документация:
• https://jenkins.io/doc/book/pipeline/
• Блог Jenkins: • https://jenkins.io/node/
• Онлайн-митапы:• https://www.meetup.com/Jenkins-online-meetup/events/237317346/ (сегодня)
HOT!• Declarative Pipeline• BlueOcean• Visual Editor• …
© 2017 CloudBees, Inc. All Rights Reserved. 32
•Оба плагина полезны•Разная архитектура•Разные области применения•Да, некоторая конкуренция есть
FAQ. Pipeline vs. JobDSL
© 2017 CloudBees, Inc. All Rights Reserved. 33
Хотелки
ØConfiguration as Code для системы
ØConfiguration as Code для задач
ØЗапуск в контейнерах
ØHigh Availability
ØВнешнее хранилище данных
© 2017 CloudBees, Inc. All Rights Reserved. 34
Jenkins в Контейнерах
Мастер в Контейнере• Один Мастер• Много мастеров
Агенты в Контейнерах• Перманентные агенты• Агенты по требованию
© 2017 CloudBees, Inc. All Rights Reserved. 35
•Предоставление нод по требованию•Все Cloud-плагины•Экзотические плагины (напр. Swarm плагин)
Cloud API
http://javadoc.jenkins.io/hudson/slaves/Cloud.html
© 2017 CloudBees, Inc. All Rights Reserved. 36
© 2017 CloudBees, Inc. All Rights Reserved. 37
• Docker Plugin• Yet Another Docker Plugin• Docker Custom Build
Environment Plugin
• Docker Pipeline Plugin• Docker Build Step• Docker Traceability• DockerHub Notifications• …
Jenkins и Docker
Агенты
Другое
© 2017 CloudBees, Inc. All Rights Reserved. 38
Docker Pipeline Plugin
• Можно шарить воркспейсы• Docker Volume• External Workspace Manager
• Много нод в одном Pipeline• Overhead, но воспроизводимость
See also: Kubernetes Pipeline Plugin
© 2017 CloudBees, Inc. All Rights Reserved. 39
Пример. “CD” для IRC-бота Jenkinsdef imageName = 'jenkinsciinfra/ircbot’node('docker') {
checkout scmsh 'git rev-parse HEAD > GIT_COMMIT'commit = readFile('GIT_COMMIT').take(6)def imageTag = "build${commit}"
stage('Build ircbot’) {withMavenEnv
(["BUILD_NUMBER=${env.BUILD_NUMBER}:${commit}"]) {sh 'make bot' // Make invokes Maven
}}
stage ('Build container’) {def whale = docker.build("${imageName}:${imageTag}”)
}
stage 'Deploy container') {whale.push()
} } https://github.com/jenkins-infra/ircbot
Docker Registry
Server
Jenkins
SCM
Puppet
© 2017 CloudBees, Inc. All Rights Reserved. 40
7 кругов виртуализации
Какое-то железо
vSphere / AWS
ОС *nix
Docker
ОС *nix
JVM
© 2017 CloudBees, Inc. All Rights Reserved. 41
Какое-то железо
vSphere / AWS
ОС *nix
Docker
ОС *nix
JVM
ИЛИ ТАК
?
© 2017 CloudBees, Inc. All Rights Reserved. 42
НЕ используйте Master в контейнерах, если…
• У вас большой инстанс• Вы запускаете один
контейнер на хост• Ваш Jenkins будет
сильно расти
• Виртуализация, VM
• Виртуализация, VM
• Виртуализация, VM
© 2017 CloudBees, Inc. All Rights Reserved. 43
Используйте Master в контейнерах…
üДля прототипированияüДля тестированияüДля мелких инстансовüДля автомасштабирования сетапов с
большим числом мастеров
© 2017 CloudBees, Inc. All Rights Reserved. 44
Хотелки
ØConfiguration as Code для системы
ØConfiguration as Code для задач
ØЗапуск в контейнерах
ØHigh Availability
ØВнешнее хранилище данных
© 2017 CloudBees, Inc. All Rights Reserved. 45
High Availability
https://go.cloudbees.com/docs/cloudbees-documentation/cookbook/book.html#ch13
© 2017 CloudBees, Inc. All Rights Reserved. 46
• “Нормальное” хранилище данных (Pluggable Storage)• Внешнее логгирование• Горячий резерв (multi-master)• Бонус: Горизонтальное масштабирование
Что надо?
High Availability• Начали обсуждения на FOSDEM 2016• Jenkins 2… 3… 4…
© 2017 CloudBees, Inc. All Rights Reserved. 47
Хотелки
ØConfiguration as Code для системы
ØConfiguration as Code для задач
ØЗапуск в контейнерах
ØHigh Availability
ØВнешнее хранилище данных
© 2017 CloudBees, Inc. All Rights Reserved. 48
• Анонсирован на Jenkins World 2016• Основные entity:
•Артефакты, Логи•Сборки: результаты тестов и т.п.•Fingerprints•…
Pluggable Storage для Jenkins
© 2017 CloudBees, Inc. All Rights Reserved. 49
•Есть Extension Point (ArtifactManager)•А реализаций… нет
Артефакты
© 2017 CloudBees, Inc. All Rights Reserved. 50
Логи в Jenkins
Логи сборок
Системные логи
Другое• Логи агентов• Поллинг SCM• Индексирование в Multibranch• …
java.util.logging
© 2017 CloudBees, Inc. All Rights Reserved. 51
External Build Logging
Мастер Ноды
Логи с операций на мастере
Build Console• Все логи идут на диск мастера• Агенты репортят логи на мастер• Логи для консоли… читаются с
диска (и progressive, да)
© 2017 CloudBees, Inc. All Rights Reserved. 52
External Build Logging. Подход
Master
NodeLogstash
Elasticsearch
Kibana
Логи с мастера
Логи с нод
Build Console
• Убрать все логи в общее хранилище
• Не нагружать мастер
Storage
Visualizer
© 2017 CloudBees, Inc. All Rights Reserved. 53
External Build Logging. Прототип
• Текущий статус: прототип• Jenkins World 2016 Hackathon:
• Поддержка AbstractProject и, частично, Pipeline• https://speakerdeck.com/onenashev/jw2016-hackathon-external-build-logging-prototype-demo
• Декабрь 2016 (Jesse Glick):• Полная поддержка Pipeline• Мини-дизайн для реализации
• Код: https://github.com/jenkinsci/logstash-plugin/pull/18
© 2017 CloudBees, Inc. All Rights Reserved. 54
External Build Logging. Прототип
© 2017 CloudBees, Inc. All Rights Reserved. 55
External Build Logging. Прототип
© 2017 CloudBees, Inc. All Rights Reserved. 56
Pluggable Storage. Планы…
Пока нет…
© 2017 CloudBees, Inc. All Rights Reserved. 57
А что есть сейчас?
© 2017 CloudBees, Inc. All Rights Reserved. 58
Пример. CloudBees Jenkins Enterprise• Решает часть задач
• High Availability – тёплый резерв• Shared Cloud и Shared Slave• Single Sign On (SSO)• Мониторинг и Аналитика• ClusterOps
• Private SaaS Edition (уст.)• Провижионинг мастеров иагентов
https://www.cloudbees.com/products/cloudbees-jenkins-enterprise
© 2017 CloudBees, Inc. All Rights Reserved. 59
Пример. CloudBees Jenkins Enterprise
© 2017 CloudBees, Inc. All Rights Reserved. 60
CloudBees Jenkins Enterprise
• Платформы:• Docker, Mesos and OpenStack or Amazon EC2
• Метрики• Единый кластер с SSO и интеграцией мастеров• В демо – 2000 активных инстансов• В бою – несколько сотен
https://www.cloudbees.com/products/cloudbees-jenkins-platform/private-saas-edition/features
© 2017 CloudBees, Inc. All Rights Reserved. 61
Пример. DotCI
http://groupon.github.io/DotCi/
• Основан на Jenkins• High Availability• Docker• Pluggable Storage (MongoDB)• ….
• НО:• Ограниченная совместимость (не Jenkins)• Кастомные плагины и шаги сборки
© 2017 CloudBees, Inc. All Rights Reserved. 62
Итого
• Jenkins постепенно развивается в нужном направлении
• Стоит попробовать:•Jenkins Pipeline•Jenkins & Docker для агентов
• Агенты в контейнерах – это удобно• Jenkins-мастер в контейнерах - это риск
© 2017 CloudBees, Inc. All Rights Reserved. 63
Спасибо!
Контакты:
E-mail: [email protected]
GitHub: oleg-nenashev
Twitter: @oleg_nenashev
Software at the speed of ideas
THANK YOU!www.cloudbees.com