spb jenkins meetup #5. jenkins in da cloud. Внутренности

64
Jenkins in da cloud. Управление Jenkins в облаках (внутренности) St. Petersburg Jenkins Meetup 15 февраля 2017

Upload: oleg-nenashev

Post on 21-Feb-2017

58 views

Category:

Software


2 download

TRANSCRIPT

Page 1: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

Jenkins in da cloud. Управление Jenkins в облаках(внутренности)

St. Petersburg Jenkins Meetup15 февраля 2017

Page 2: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 2

Обо мне

@oleg_nenashev

oleg-nenashev

Page 3: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 3

Page 4: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 4

А что у Вас? Приватные или публичные

облака?

Page 5: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 5

Jenkins – это Cloud-Native?

Page 6: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 6

НЕТ (ИМХО докладчика)

Disclaimer:Ø Презентация отражает личное мнение докладчикаØ Мнение докладчика может не совпадать с позицией

компании CloudBees и/или сообщества JenkinsØ Мнение докладчика может не совпадать с Вашим

мнением

Page 7: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 7

üЧТО ЕСТЬ В JENKINS?üЧЕГО НЕ ХВАТАЕТ?

О чём доклад?

Page 8: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 8

ИМХО автора. Jenkins – пока не Cloud-Native

• Появился до того, как клауды стали мейнстримом

• Архитектура ядра не была рассчитана на клауды

• Фичи – в плагинах

http://stats.jenkins-ci.org/jenkins-stats/

Hudson Jenkins

Page 9: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 9

ИМХО докладчика. Не Cloud-Native

9

IV

III

III CRON

wannabe

….

III+

Page 10: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 10

Хотелки

ØConfiguration as Code для системы

ØConfiguration as Code для задач

ØЗапуск в контейнерах

ØHigh Availability

ØВнешнее хранилище данных

Page 11: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 11

Хотелки

ØConfiguration as Code для системы

ØConfiguration as Code для задач

ØЗапуск в контейнерах

ØHigh Availability

ØВнешнее хранилище данных

Page 12: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 12

Configuration as Code в Jenkins

ЗадачиСистемные конфигурации

Page 13: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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…

Page 14: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 14

Jenkins 2 и External Configuration Management

Page 15: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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

Page 16: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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

Page 17: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 17

• Репозиторий для системных Groovy-скриптов

• Решаемые задачи:• Управление конфигурациями Jenkins• Управление ими… в рантайме• Кастомные шаги сборки

Scriptler Plugin

https://plugins.jenkins.io/scriptler

Page 18: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 18

Scriptler Plugin

• Внешние репозиториискриптов

• Приватные репозитории• Документация J

Page 19: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 19

Scriptler Plugin

Page 20: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 20

Итак, что нового?

Page 21: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 21

Итак, что нового?• Нет единого решения• Configuration Management –

вне проекта Jenkins• Нет активных проектов

Page 22: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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• Статус:

• Работает для базовых задач• Заброшен(?)

Page 23: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 23

Хотелки

ØConfiguration as Code для системы

ØConfiguration as Code для задач

ØЗапуск в контейнерах

ØHigh Availability

ØВнешнее хранилище данных

Page 24: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 24

Описание задач в Jenkins … as Code

Job DSL

Pipeline (бывш. Workflow)

Jenkins Job Builder

Groovy

Groovy

YAML

Ещё несколько плагинов…

Предлагается по-умолчанию в Jenkins 2

Page 25: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 25

•Groovy DSL для описания задач•Тип задачи в Jenkins (Pipeline Job)•Open-source экосистема для X-as-code

25

Что такое Jenkins Pipeline?

Page 26: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 26

Специфика Pipeline

Описание всего процесса одной

задачей

Page 27: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 27

• Pipeline не привязан к конкретной ноде или рабочей директории

• Параллелизация• Команда parallel() – не нужны связки задач

• Множественные node() в одной задаче• => + parallel() – запуск тестов на разных машинах тестов на машинах

Специфика Pipeline

Page 28: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 28

Пример – Императивный Pipeline

28

• Синтаксис на базе Groovy• Шаги для типовых операций• Описания задач можно хранить в SCM

• Jenkinsfile – описание задачи в корне репозитория• Шаг git() заменяется на “checkout scm”

• http://bit.ly/pipeline-tutorial

Page 29: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 29

Пример – Декларативный Pipeline

Page 30: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 30

• Global CPS Library• Git внутри Jenkins

• Внешние библиотеки• Хранятся в SCM• Versioning

Библиотеки

Page 31: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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• …

Page 32: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 32

•Оба плагина полезны•Разная архитектура•Разные области применения•Да, некоторая конкуренция есть

FAQ. Pipeline vs. JobDSL

Page 33: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 33

Хотелки

ØConfiguration as Code для системы

ØConfiguration as Code для задач

ØЗапуск в контейнерах

ØHigh Availability

ØВнешнее хранилище данных

Page 34: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 34

Jenkins в Контейнерах

Мастер в Контейнере• Один Мастер• Много мастеров

Агенты в Контейнерах• Перманентные агенты• Агенты по требованию

Page 35: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 35

•Предоставление нод по требованию•Все Cloud-плагины•Экзотические плагины (напр. Swarm плагин)

Cloud API

http://javadoc.jenkins.io/hudson/slaves/Cloud.html

Page 36: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 36

Page 37: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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

Агенты

Другое

Page 38: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 38

Docker Pipeline Plugin

• Можно шарить воркспейсы• Docker Volume• External Workspace Manager

• Много нод в одном Pipeline• Overhead, но воспроизводимость

See also: Kubernetes Pipeline Plugin

Page 39: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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

Page 40: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 40

7 кругов виртуализации

Какое-то железо

vSphere / AWS

ОС *nix

Docker

ОС *nix

JVM

Page 41: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 41

Какое-то железо

vSphere / AWS

ОС *nix

Docker

ОС *nix

JVM

ИЛИ ТАК

?

Page 42: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 42

НЕ используйте Master в контейнерах, если…

• У вас большой инстанс• Вы запускаете один

контейнер на хост• Ваш Jenkins будет

сильно расти

• Виртуализация, VM

• Виртуализация, VM

• Виртуализация, VM

Page 43: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 43

Используйте Master в контейнерах…

üДля прототипированияüДля тестированияüДля мелких инстансовüДля автомасштабирования сетапов с

большим числом мастеров

Page 44: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 44

Хотелки

ØConfiguration as Code для системы

ØConfiguration as Code для задач

ØЗапуск в контейнерах

ØHigh Availability

ØВнешнее хранилище данных

Page 45: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 45

High Availability

https://go.cloudbees.com/docs/cloudbees-documentation/cookbook/book.html#ch13

Page 46: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 46

• “Нормальное” хранилище данных (Pluggable Storage)• Внешнее логгирование• Горячий резерв (multi-master)• Бонус: Горизонтальное масштабирование

Что надо?

High Availability• Начали обсуждения на FOSDEM 2016• Jenkins 2… 3… 4…

Page 47: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 47

Хотелки

ØConfiguration as Code для системы

ØConfiguration as Code для задач

ØЗапуск в контейнерах

ØHigh Availability

ØВнешнее хранилище данных

Page 48: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 48

• Анонсирован на Jenkins World 2016• Основные entity:

•Артефакты, Логи•Сборки: результаты тестов и т.п.•Fingerprints•…

Pluggable Storage для Jenkins

Page 49: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 49

•Есть Extension Point (ArtifactManager)•А реализаций… нет

Артефакты

Page 50: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 50

Логи в Jenkins

Логи сборок

Системные логи

Другое• Логи агентов• Поллинг SCM• Индексирование в Multibranch• …

java.util.logging

Page 51: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 51

External Build Logging

Мастер Ноды

Логи с операций на мастере

Build Console• Все логи идут на диск мастера• Агенты репортят логи на мастер• Логи для консоли… читаются с

диска (и progressive, да)

Page 52: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 52

External Build Logging. Подход

Master

NodeLogstash

Elasticsearch

Kibana

Логи с мастера

Логи с нод

Build Console

• Убрать все логи в общее хранилище

• Не нагружать мастер

Storage

Visualizer

Page 53: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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

Page 54: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 54

External Build Logging. Прототип

Page 55: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 55

External Build Logging. Прототип

Page 56: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 56

Pluggable Storage. Планы…

Пока нет…

Page 57: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 57

А что есть сейчас?

Page 58: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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

Page 59: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 59

Пример. CloudBees Jenkins Enterprise

Page 60: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 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

Page 61: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 61

Пример. DotCI

http://groupon.github.io/DotCi/

• Основан на Jenkins• High Availability• Docker• Pluggable Storage (MongoDB)• ….

• НО:• Ограниченная совместимость (не Jenkins)• Кастомные плагины и шаги сборки

Page 62: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 62

Итого

• Jenkins постепенно развивается в нужном направлении

• Стоит попробовать:•Jenkins Pipeline•Jenkins & Docker для агентов

• Агенты в контейнерах – это удобно• Jenkins-мастер в контейнерах - это риск

Page 63: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

© 2017 CloudBees, Inc. All Rights Reserved. 63

Спасибо!

Контакты:

E-mail: [email protected]

GitHub: oleg-nenashev

Twitter: @oleg_nenashev

Page 64: SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности

Software at the speed of ideas

THANK YOU!www.cloudbees.com