Jenkins 2. Как сделать мажорный релиз и не развалить...

37
@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016 XII международная конференция CEE-SECR / РАЗРАБОТКА ПО 28 - 29 октября, Москва Олег Ненашев Jenkins 2. Как сделать мажорный релиз и не развалить сообщество? CloudBees, Inc.

Transcript of Jenkins 2. Как сделать мажорный релиз и не развалить...

Page 1: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

XIIмеждународнаяконференция

CEE-SECR/РАЗРАБОТКАПО

28- 29 октября,Москва

ОлегНенашев

Jenkins 2.Каксделатьмажорныйрелизинеразвалитьсообщество?

CloudBees,Inc.

Page 2: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

� ЗакончилСПбПУ,к.т.н.� CloudBees,JenkinsDeveloper

� CloudBees– одинизосновныхконтрибьюторов Jenkins

� ЗанимаюсьOpen-SourceиCloudBeesJenkinsPlatform

� (+)Поддержка/Консалтинг

� JenkinsProject,CoreTeam� РаботаюсHudson/Jenkins~8лет

� АвтоматизациявHardware/Embedded

� ЗанимаюсьядромJenkins

� Поддерживаюплагины:RoleStrategy,Ownership,Job

Restrictions, CustomTools…

> whoami

@oleg_nenashev

oleg-nenashev

2

Page 3: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

О чём доклад?Естьвдокладе:

ü ОсообществеJenkins

ü ОрелизеJenkins2

ü Одальнейшихпланах

3

Disclaimer:• Даннаяпрезентацияотражаетличноемнениедокладчика• Личноемнениедокладчикаможетнесовпадатьс

официальнойпозициейCloudBeesилисообществаJenkins

Нетвдокладе:

X DeepDiveвJenkinsPipeline

X Сложныхпримеров

=>MoscowJenkinsMeetup

Page 4: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Who is Mr. Jenkins?

4

Jenkins – этоСистема

Непрерывной Интеграции

Сервер/фреймворк

Автоматизации

Page 5: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Кто такой Jenkins?

5

Сборка

Тестиро-вание

Созданиепакетов

Развер-тывание

Отчёты,анали-тика

идругое

• Сервер автоматизации• Continuous Integration• Continuous Delivery• DevOps• …

• Веб-интерфейс• Распределенная система• >1000 плагинов• Open-source (MIT)

https://jenkins.io

Page 6: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

ПопулярностьJenkins

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

• 140,000 инсталляций• 6 миллионов задач• ~300 коммиттеров за

полгода• ~2 новых плагина в

неделю• ~50 релизов плагинов

в неделю

6

Page 7: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Jenkins Universe

Сообщество

* Исх.Автор: Kuiper oort (dumb version).jpg: NASADump version updated by Manco Capac in order to have a better full image. No Credit required for this current version.derivativework: Skab (talk), Chesnok (talk) - Kuiper oort (dumb version).jpg, Общественное

достояние, https://commons.wikimedia.org/w/index.php?curid=8812483

Core Team Разработчики плагинов

Профес-сиональныеадмины

Пользователи

~25 ~300

~тысячи

~миллионы

7

• Число пользователей растет быстрее числа разработчиков

• Размер Core Team почти не изменился с 2011г.

• Не хватает ментейнеровплагинов

Page 8: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Kohsuke:“Jenkinsproject– этобазар”

• Самоорганизация

• Большоечислоучастников

• Разныеинтересыипроекты8

Сообщество Jenkins

Page 9: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

� Сложноприниматьрешения

� => Частичнопомогает JenkinsGovernanceMeeting

� Нетединогопроцесса

� =>Прямыекоммиты вмастер

� =>Мердж бездостаточногоколичестваголосов

� Процесскомьюнити vs.процессгрупп

контрибьюторов (CloudBees,RedHat ит.д.)

НедостаткиBazaar-подхода

9

Page 10: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

СообществоразработчиковJenkinsboard

CoreTeam

Security

Release/LTS

Events

INFRA Website

"Команды"плагинов

10

IRCнаFreeNode� #jenkins,#jenkins-meeting,

#jenkins-community

JenkinsJIRA� Ядро иплагины

� Компонент“_unsorted”–

Еслинепонятно

Рассылки (@googlegroups.com)

� jenkinsci-dev,jenkinsci-cert

� jenkinsci-users

Page 11: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Комьюнити. Jenkins-митапы

• >40 митапов• >8000 участников

11 • Online Meetup

Page 12: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

� Twitter:@jenkins_ru

� Gitter:http://gitter.im/jenkinsci-ru

� Q&A,использованиеиразработкаJenkins

� Митапы:

� http://www.meetup.com/St-Petersburg-Jenkins-Meetup/

� http://www.meetup.com/Moscow-Jenkins-Meetup/

� http://www.meetup.com/Belarus-Jenkins-Meetup/

� …

Русскоязычноесообщество

Здесьможетбыть

Вашелого

12

Page 13: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Jenkins 1.х. Чтобылонетак?� CIуженемоден

� … must-have

� СменафокусавПО

� ContinuousDelivery

� ContinuousDeployment

� DevOps

� Everything asCode

13

Рой Buzzword’ов

Page 14: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Jenkins 1.х. Чтобылонетак?� Изменениеэкосистемы

� Публичныеиприватныеоблака

� Docker,Docker,Docker,Docker,…

� Централизациясистемавтоматизации

� Требованиякнадежности

� Конкурирующиесервисы

14

Page 15: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Jenkins 1.х. Чтобылонетак?

L

Устаревший

веб-интерфейс

Сложностьнастройкисистемыизадач

Неполнаядокументация

Интеграционныепроблемы

15

Было: Проект от хакеров для хакеров (open-source)

Стало: не все хотят/могут копаться в коде

Page 16: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Масштабируемостьограничена

Агент1

Агент2

АгентN. . .

• Мастер решает большую часть задач• Удалённые задачи ВСЕГДА нагружают мастер• Ввод-вывод на мастере

Горизонтальное масштабирование

??? GearmanCloudBees Jenkins Platform

16

Page 17: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

� Сейчас- Малоразработчиковядра

� Многиевендоры используютJenkins ”какесть”

� Недостаток“постоянных”контрибьюторов

� Малоактивныхмейнтейнеров плагинов

� Есть:Сотни� Надо:Тысячи

Проблемыроста

17

Page 18: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

>5 летбинарнойсовместимости• Плагины для Hudson 2 ещё работают!

• Для пользователей:• Архитектурные проблемы• Устаревший UI• Интеграционные проблемы в плагинах

• Для разработчиков Jenkins: • Высокая стоимость поддержки• Порог входа

18

Page 19: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

Jenkins 2• Планирование– FOSDEM2016

• Релиз 2.0- в апреле 2016

• Long-TermSupport(LTS) – июль 2016

• ~50%инсталляций обновились на Jenkins2

19

Page 20: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Jenkins 2.Какэтобыло?

Ожидание

Реальность

20

Page 21: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Jenkins 2.Какэтобыло?

Ожидание Реальность

� Изменитьархитектуруи

«сделатькакнадо»

� Сделатьвсезаплани-

рованные врелизе2.0

� Многоконтрибьюторов

� Релиз2.0вкороткийсрок

(несколькомесяцев)

� Минимальныеизменения,

сохранениесовместимости

� 2.0– лишьчастьизменений,

работаемнадоостальным

� ~10человек+CloudBees

� АведьсделалиJ

21

Page 22: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

� Новыйвебсайт (jenkins.io)

� Security-опциипо-умолчанию

� УлучшенияUI:� Новыймастерустановки/апгрейда

� Улучшениестраницконфигурации

� Изменениенабораплагинов

� JenkinsPipeline� ConfigurationasCodeдлязадач

Jenkins 2. Чтовнутри?

http://bit.ly/jenkins20

22

Page 23: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Pipeline - этоØGroovyDSLдляописаниязадач

� Альтернативы– JobDSL,JenkinsJobBuilder

Ø Типзадачив Jenkins(Pipeline,Multi-branch Pipeline)� ОписаниезадачможнохранитьвSCM- Jenkinsfile

� Автоматическоесознаниезадачдляветокиpull-request’ов

Ø Экосистема дляAutomation-as-Code� >20Pipeline-плагинов(“ядро?”)

� Множествофич (UI,Стабильность)

� Интеграции

23

// Run on a node having the “my_fpga” label

node("linux && ml509") {

git url:"http://github.com/myorg/myproject.git"

sh "make all"

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

Page 24: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Основныефичи Pipeline� Groovy– всеплюсыООП

� Обработкаошибок� Библиотеки(с@Grabизгруви)

� Нетпривязкикотдельноймашине� Командаparallel()– ненужнысвязкиджобов� Множественныеnode()воднойзадаче

� Интерактивныешаги

� Устойчивостькрестартаммастераипроблемамссетью

� UI:PipelineStageView,BlueOcean

24

Page 25: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Пример. CD Jenkins-ботаdef imageName = 'jenkinsciinfra/ircbot’node('docker') {checkout scm// Немного магии для получения тэга Docker-образа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 вызывает Maven

}

stage 'Build container'def whale = docker.build("${imageName}:${imageTag}”)

stage 'Deploy container'whale.push()

}https://github.com/jenkins-infra/ircbot

Слишком сложно?• Snippet Generator• Pipeline Model Definition• Travis YML Converter

Page 26: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

� https://jenkins.io/doc/

� Моипредыдущиедоклады:

� Митапы поJenkinsвСПб

� QA:Conference:

� “Jenkins2дляавтоматизаторов”:

� http://bit.ly/jenkins2-qaconf

� SQADays:

� “Jenkins 2.0:Организуем тестирование в составе CD”

� http://sqadays.com/ru/index?eventId=38947

ПодробнееоPipeline

26

Page 27: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Итак,ачтосCommunity?� МногиебылинедовольныподходомвJenkins2.0

� Недостаточноизмененийвархитектуре

� Нетжелаемыххотелок

� МаловниманияуделеноContributorExperience

� НО:� Jenkins2.0!=Jenkins2

� МногиеTODOреализуютсявJenkins2.x

� Jenkins3– паралет

27

Page 28: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

Jenkins 2. ДальнейшиеПланы• РазвитиеэкосистемыPipeline

• UI/UX,BlueOcean

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

• Инфраструктура

28

Page 29: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

UI/UX• НовыйJavaScript-фреймворк длясозданияUIвJenkins

• Node.js,React,интеграциявмеханизмплагинов

• УлучшениеUIвядре• Доработкастраницнавигацииинастройкизадач

• Оптимизация«тяжелыхэлементов»- очередь,историясборокипр.

• BlueOcean – попыткасделатьновыйUI

29

Page 30: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Blue Ocean� НовыйWebUIдляJenkins

� Фокус– JenkinsPipeline

30

https://jenkins.io/projects/blueocean/

Page 31: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Масштабированиеинадежность

� PluggableStorage

� Использованиевнешниххранилищданных

� Минимизацияиспользованиядискаисети

� ExternalLogging– Logstash иCo

� Улучшениемеханизмакоммуникациисагентами

� Remoting3/JNLP4

� Диагностикаагентоввслучаеотказов

� ВозможностьобновленияRemotingбезапдейта ядра

31

Page 32: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

� Было:“сапожникбезсапог”

� ПартнерствосAzure

� https://jenkins.io/blog/2016/05/18/announcing-azure-

partnership/

� Планы:

� Релиз-flow безчеловеческогофактора

� ПереезднаAzure– большересурсов

� Переездсjenkins.ci.cloudbees.com наOSS-onlyинфраструктуру

Jenkins 2. Инфраструктура

32

Page 33: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

� ИнтеграцияновогоparentPOMвплагины

� POMбольшенепривязанкверсииядра=> можнообновлятьflowбезядра

� Статическийанализ– хотябыFindBugs вавтосбрках

� Доработка

� AcceptanceTestHarnessиPluginCompatibility

фреймворков

Jenkins 2. Качество

33

Page 34: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

АрхитектурныеизменениеJenkins� Основныекандидаты:

� МеханизмустареванияAPI

� PluggableStorage- подключение внешниххранилищ

� Логи,Артефакты,конфиги,…

� Горизонтальноемасштабирование

� Переработкаremoting– переездкоммуникацийна

стандартнуюopen-sourceшину

� Staytuned!

34

Page 35: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Выводы

1. Jenkinsпродолжаетразвиваться

2. Jenkins2– непростомаркетинговыйрелиз

3. Обновлятьсянадо

� Гайды поапгрейду– насайте

4. Стоитпопробовать:

� JenkinsPipeline/Multi-BranchPipeline

� BlueOcean

35

Page 36: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Хотитеузнатьбольше?

� JenkinsMoscowMeetup,2ноября,19:00

� http://www.meetup.com/Moscow-Jenkins-

Meetup/events/235107785/

� ОлегНенашев

� Jenkins2.x.ЧтоДальше?

� КириллТолкачев,

� CDwithJenkins:LessonsLearned

� Mr.TBD

36

Офис Deutsche Bank, Беговая 3 стр. 1, 27 этаж

Page 37: Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?

@oleg_nenashev, #jenkinsci, #jenkins_ru, #cee_secr Октябрь 2016

Вопросы?Offline: http://gitter.im/jenkinsci-ru

Контакты:

E-mail: [email protected]

GitHub: oleg-nenashev

Twitter: @oleg_nenashev

Ссылки:

• jenkins.io

• cloudbees.com

• go.cloudbees.com