More Related Content Similar to SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности (20) SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности1. Jenkins in da cloud.
Управление Jenkins в облаках
(внутренности)
St. Petersburg Jenkins Meetup
15 февраля 2017
2. © 2017 CloudBees, Inc. All Rights Reserved. 2
Обо мне
@oleg_nenashev
oleg-nenashev
4. © 2017 CloudBees, Inc. All Rights Reserved. 4
А что у Вас?
Приватные или публичные
облака?
6. © 2017 CloudBees, Inc. All Rights Reserved. 6
НЕТ
(ИМХО докладчика)
Disclaimer:
Ø Презентация отражает личное мнение докладчика
Ø Мнение докладчика может не совпадать с позицией
компании CloudBees и/или сообщества Jenkins
Ø Мнение докладчика может не совпадать с Вашим
мнением
7. © 2017 CloudBees, Inc. All Rights Reserved. 7
üЧТО ЕСТЬ В JENKINS?
üЧЕГО НЕ ХВАТАЕТ?
О чём доклад?
8. © 2017 CloudBees, Inc. All Rights Reserved. 8
ИМХО автора. Jenkins – пока не Cloud-Native
• Появился до того, как
клауды стали мейнстримом
• Архитектура ядра не была
рассчитана на клауды
• Фичи – в плагинах
http://stats.jenkins-ci.org/jenkins-stats/
Hudson Jenkins
9. © 2017 CloudBees, Inc. All Rights Reserved. 9
ИМХО докладчика. Не Cloud-Native
9
IV
III
II
I CRON
wannabe
….
III+
10. © 2017 CloudBees, Inc. All Rights Reserved. 10
Хотелки
Ø Configuration as Code для системы
Ø Configuration as Code для задач
Ø Запуск в контейнерах
Ø High Availability
Ø Внешнее хранилище данных
11. © 2017 CloudBees, Inc. All Rights Reserved. 11
Хотелки
Ø Configuration as Code для системы
Ø Configuration as Code для задач
Ø Запуск в контейнерах
Ø High Availability
Ø Внешнее хранилище данных
12. © 2017 CloudBees, Inc. All Rights Reserved. 12
Configuration as Code в Jenkins
ЗадачиСистемные
конфигурации
13. © 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
Unsafe
Just examples…
14. © 2017 CloudBees, Inc. All Rights Reserved. 14
Jenkins 2 и External Configuration Management
15. © 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
16. © 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
17. © 2017 CloudBees, Inc. All Rights Reserved. 17
• Репозиторий для системных
Groovy-скриптов
• Решаемые задачи:
• Управление конфигурациями Jenkins
• Управление ими… в рантайме
• Кастомные шаги сборки
Scriptler Plugin
https://plugins.jenkins.io/scriptler
18. © 2017 CloudBees, Inc. All Rights Reserved. 18
Scriptler Plugin
• Внешние репозитории
скриптов
• Приватные репозитории
• Документация J
21. © 2017 CloudBees, Inc. All Rights Reserved. 21
Итак, что нового?
• Нет единого решения
• Configuration Management –
вне проекта Jenkins
• Нет активных проектов
22. © 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
• Статус:
• Работает для базовых задач
• Заброшен(?)
23. © 2017 CloudBees, Inc. All Rights Reserved. 23
Хотелки
Ø Configuration as Code для системы
Ø Configuration as Code для задач
Ø Запуск в контейнерах
Ø High Availability
Ø Внешнее хранилище данных
24. © 2017 CloudBees, Inc. All Rights Reserved. 24
Описание задач в Jenkins … as Code
Job DSL
Pipeline (бывш. Workflow)
Jenkins Job Builder
Groovy
Groovy
YAML
Ещё несколько плагинов…
Предлагается по-умолчанию в Jenkins 2
25. © 2017 CloudBees, Inc. All Rights Reserved. 25
•Groovy DSL для описания задач
•Тип задачи в Jenkins (Pipeline Job)
•Open-source экосистема для X-as-code
25
Что такое Jenkins Pipeline?
26. © 2017 CloudBees, Inc. All Rights Reserved. 26
Специфика Pipeline
Описание всего
процесса одной
задачей
27. © 2017 CloudBees, Inc. All Rights Reserved. 27
• Pipeline не привязан к конкретной ноде или рабочей
директории
• Параллелизация
• Команда parallel() – не нужны связки задач
• Множественные node() в одной задаче
• => + parallel() – запуск тестов на разных машинах
тестов на машинах
Специфика Pipeline
28. © 2017 CloudBees, Inc. All Rights Reserved. 28
Пример – Императивный Pipeline
28
• Синтаксис на базе Groovy
• Шаги для типовых операций
• Описания задач можно хранить в SCM
• Jenkinsfile – описание задачи в корне репозитория
• Шаг git() заменяется на “checkout scm”
• http://bit.ly/pipeline-tutorial
30. © 2017 CloudBees, Inc. All Rights Reserved. 30
• Global CPS Library
• Git внутри Jenkins
• Внешние библиотеки
• Хранятся в SCM
• Versioning
Библиотеки
31. © 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
• …
32. © 2017 CloudBees, Inc. All Rights Reserved. 32
•Оба плагина полезны
•Разная архитектура
•Разные области применения
•Да, некоторая конкуренция есть
FAQ. Pipeline vs. JobDSL
33. © 2017 CloudBees, Inc. All Rights Reserved. 33
Хотелки
Ø Configuration as Code для системы
Ø Configuration as Code для задач
Ø Запуск в контейнерах
Ø High Availability
Ø Внешнее хранилище данных
34. © 2017 CloudBees, Inc. All Rights Reserved. 34
Jenkins в Контейнерах
Мастер в Контейнере
• Один Мастер
• Много мастеров
Агенты в Контейнерах
• Перманентные агенты
• Агенты по требованию
35. © 2017 CloudBees, Inc. All Rights Reserved. 35
•Предоставление нод по требованию
•Все Cloud-плагины
•Экзотические плагины (напр. Swarm плагин)
Cloud API
http://javadoc.jenkins.io/hudson/slaves/Cloud.html
37. © 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
Агенты
Другое
38. © 2017 CloudBees, Inc. All Rights Reserved. 38
Docker Pipeline Plugin
• Можно шарить воркспейсы
• Docker Volume
• External Workspace Manager
• Много нод в одном Pipeline
• Overhead, но воспроизводимость
See also: Kubernetes
Pipeline Plugin
39. © 2017 CloudBees, Inc. All Rights Reserved. 39
Пример. “CD” для IRC-бота Jenkins
def imageName = 'jenkinsciinfra/ircbot’
node('docker') {
checkout scm
sh '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
40. © 2017 CloudBees, Inc. All Rights Reserved. 40
7 кругов
виртуализации
Какое-то железо
vSphere / AWS
ОС *nix
Docker
ОС *nix
JVM
41. © 2017 CloudBees, Inc. All Rights Reserved. 41
Какое-то железо
vSphere / AWS
ОС *nix
Docker
ОС *nix
JVM
ИЛИ
ТАК
?
42. © 2017 CloudBees, Inc. All Rights Reserved. 42
НЕ используйте Master в контейнерах, если…
• У вас большой инстанс
• Вы запускаете один
контейнер на хост
• Ваш Jenkins будет
сильно расти
• Виртуализация, VM
• Виртуализация, VM
• Виртуализация, VM
43. © 2017 CloudBees, Inc. All Rights Reserved. 43
Используйте Master в контейнерах…
üДля прототипирования
üДля тестирования
üДля мелких инстансов
üДля автомасштабирования сетапов с
большим числом мастеров
44. © 2017 CloudBees, Inc. All Rights Reserved. 44
Хотелки
Ø Configuration as Code для системы
Ø Configuration as Code для задач
Ø Запуск в контейнерах
Ø High Availability
Ø Внешнее хранилище данных
45. © 2017 CloudBees, Inc. All Rights Reserved. 45
High Availability
https://go.cloudbees.com/docs/cloudbees-
documentation/cookbook/book.html#ch13
46. © 2017 CloudBees, Inc. All Rights Reserved. 46
• “Нормальное” хранилище данных (Pluggable Storage)
• Внешнее логгирование
• Горячий резерв (multi-master)
• Бонус: Горизонтальное масштабирование
Что надо?
High Availability
• Начали обсуждения на FOSDEM 2016
• Jenkins 2… 3… 4…
47. © 2017 CloudBees, Inc. All Rights Reserved. 47
Хотелки
Ø Configuration as Code для системы
Ø Configuration as Code для задач
Ø Запуск в контейнерах
Ø High Availability
Ø Внешнее хранилище данных
48. © 2017 CloudBees, Inc. All Rights Reserved. 48
• Анонсирован на Jenkins World 2016
• Основные entity:
•Артефакты, Логи
•Сборки: результаты тестов и т.п.
•Fingerprints
•…
Pluggable Storage для Jenkins
49. © 2017 CloudBees, Inc. All Rights Reserved. 49
•Есть Extension Point (ArtifactManager)
•А реализаций… нет
Артефакты
50. © 2017 CloudBees, Inc. All Rights Reserved. 50
Логи в Jenkins
Логи сборок
Системные логи
Другое
• Логи агентов
• Поллинг SCM
• Индексирование в Multibranch
• …
java.util.logging
51. © 2017 CloudBees, Inc. All Rights Reserved. 51
External Build Logging
Мастер Ноды
Логи с операций
на мастере
Build Console• Все логи идут на диск мастера
• Агенты репортят логи на мастер
• Логи для консоли… читаются с
диска (и progressive, да)
52. © 2017 CloudBees, Inc. All Rights Reserved. 52
External Build Logging. Подход
Master
Node
Logstash
Elasticsearch
Kibana
Логи с мастера
Логи с нод
Build
Console
• Убрать все логи в
общее хранилище
• Не нагружать мастер
Storage
Visualizer
53. © 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
56. © 2017 CloudBees, Inc. All Rights Reserved. 56
Pluggable Storage. Планы…
Пока нет…
58. © 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
59. © 2017 CloudBees, Inc. All Rights Reserved. 59
Пример. CloudBees Jenkins Enterprise
60. © 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
61. © 2017 CloudBees, Inc. All Rights Reserved. 61
Пример. DotCI
http://groupon.github.io/DotCi/
• Основан на Jenkins
• High Availability
• Docker
• Pluggable Storage (MongoDB)
• ….
• НО:
• Ограниченная совместимость (не Jenkins)
• Кастомные плагины и шаги сборки
62. © 2017 CloudBees, Inc. All Rights Reserved. 62
Итого
• Jenkins постепенно развивается в
нужном направлении
• Стоит попробовать:
•Jenkins Pipeline
•Jenkins & Docker для агентов
• Агенты в контейнерах – это удобно
• Jenkins-мастер в контейнерах - это риск
63. © 2017 CloudBees, Inc. All Rights Reserved. 63
Спасибо!
Контакты:
E-mail: onenashev@cloudbees.com
GitHub: oleg-nenashev
Twitter: @oleg_nenashev