Slide 1

Slide 1 text

Who is Mr. Jenkins? Олег Ненашев (@oleg_nenashev) Jenkins project / CloudBees Ярославль, 2018

Slide 2

Slide 2 text

#jenkins_msk @oleg_nenashev, @jenkins_ru О чём доклад? ◦Кто такой Jenkins? ◦Pipeline и Configuration-as-Code ◦Что нового в проекте? Немного о Jenkins X и Essentials ◦Q&A 2

Slide 3

Slide 3 text

#jenkins_msk @oleg_nenashev, @jenkins_ru > whoami -jenkins @oleg_nenashev oleg-nenashev librecores.org Meetups СПб / Политех 3

Slide 4

Slide 4 text

#jenkins_msk @oleg_nenashev, @jenkins_ru > whoami -jenkins Использую Hudson/Jenkins с 2008го Коммиттер с 2012го Сейчас: • Мейнтейнер ядра • Организатор митапов Работаю в CloudBees • CloudBees Core • CloudBees Jenkins Support @oleg_nenashev oleg-nenashev 4

Slide 5

Slide 5 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Русскоязычное сообщество Jenkins Митапы: ◦Москва, СПб, Минск ◦Ярославль Gitter: #jenkinsci-ru/public YouTube: http://bit.ly/jenkins-ru-youtube Facebook: http://bit.ly/jenkins-ru-facebook Twitter: @jenkins_ru Москва: Здесь может быть Ваше лого 5

Slide 6

Slide 6 text

#jenkins_msk @oleg_nenashev, @jenkins_ru О Вас 6

Slide 7

Slide 7 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Кто такой Jenkins? • 2005: Появился как Hudson • 2008: Duke's Choice Award • 2011: Переименование в Jenkins • 2012: Самый популярный сервер непрерывной интеграции • 2015: >100к активных инсталляций • 2015: 1200 плагинов 7

Slide 8

Slide 8 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 1. Один из наиболее популярных CI/CD тулов 2. Open-source проект 3. Большое сообщество 4. Интеграции 5. Коммерческая поддержка (опц.) Кто такой Jenkins? https://jenkins.io 8

Slide 9

Slide 9 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Популярность Jenkins 9 http://stats.jenkins-ci.org/jenkins-stats/ • >170.000 активных инсталляций • ~500 коммиттеров за полгода • ~3 новых плагина в неделю • ~30 релизов плагинов в неделю

Slide 10

Slide 10 text

2018 – Исследование JetBrains 10 https://www.jetbrains.com/research/devecosystem-2018/team-tools/

Slide 11

Slide 11 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Интеграции >1200 плагинов Интеграция с сотнями тулов Управление процессами автоматизации Автоматизация любых задач Code & Commit Build & Config Scan & Test Release Deploy 11

Slide 12

Slide 12 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins – Сервер CI/CD для ПО Вы согласны? 12

Slide 13

Slide 13 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins – Software CI/CD Server – Сервер/Фреймворк автоматизации Disclaimer: IMHO 13

Slide 14

Slide 14 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Почему “автоматизации”? 14 Непрерывной Интеграции Continuous Integration Continuous Delivery DevOps Автоматизация бухучёта Home Automation CRON с WebUI

Slide 15

Slide 15 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Почему “фреймворк”? 15 Система Гибок и расширяем Минимален «из коробки» Требует настройки

Slide 16

Slide 16 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 16 Инфра- структура агентов Доку- мен- тация Сервисы Плагины Конфиги Инфра- структура Бэкенд Шаб- лоны Система на базе Jenkins

Slide 17

Slide 17 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Размер значение имеет! Разные подходы Разные окружения Разные решения 17

Slide 18

Slide 18 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Насколько большой у Вас Jenkins? 18

Slide 19

Slide 19 text

Кластер Jenkins Мега - Jenkins Локальный сетап для команды Сетап для департамента Несколько Jenkins

Slide 20

Slide 20 text

Фреймворк на Jenkins 7 лет назад

Slide 21

Slide 21 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 7 лет назад… Failover ◦ Naginator-плагин Воспроизводимость ◦ Чистое окружение ◦ Одноразовые виртуальные машины 21 •Параллелизация – Matrix Project – Parameterized Trigger •Цепочки задач: – MultiJob plugin – Build Pipeline Plugin •Шаблонизация: – Template project – Inheritance plugin

Slide 22

Slide 22 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Классические подходы @ scale Спагетти-автоматизация • Зависимости между задачами • Трекинг компонентов • Сложные конфигурации • Дупликация • Сложность поддержки • Ошибки 22

Slide 23

Slide 23 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Что изменилось? ◦Облачные технологии ◦SaaS ◦Контейнеризация ◦Configuration-as-Code 23

Slide 24

Slide 24 text

#jenkins_msk @oleg_nenashev, @jenkins_ru CI/CD стал проще! 24

Slide 25

Slide 25 text

#jenkins_msk @oleg_nenashev, @jenkins_ru [X] as code – зачем оно нужно? Хранение [X] вместе с проектом Отслеживание изменений Тестирование [X] вместе с проектом 25 [X] – Configuration, Documentation, Pipeline… Everything!

Slide 26

Slide 26 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Configuration as Code в Jenkins Задачи Системные конфигурации 26

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Системные конфигурации… as Code Внешние тулы Jenkins CLI and REST API python-jenkins jenkins-client (java) Configuration Management Ansible, Chef, … Docker, Docker Compose ... Решения в проекте Jenkins Groovy Boot Hooks System Config DSL (R.I.P.) Groovy Plugin, Scriptler Plugin SCM Sync Configuration • Много решений с Groovy • Вызов Groovy-скриптов через CLI 28

Slide 29

Slide 29 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Новый плагин: Jenkins Configuration-as-Code Альфа версии – с февраля Конфигурация через YAML https://github.com/jenkinsci/confi guration-as-code-plugin 29

Slide 30

Slide 30 text

jenkins: systemMessage: "JCasC Demo" numExecutors: 1 scmCheckoutRetryCount: 4 mode: NORMAL securityRealm: local: allowsSignup: false users: - id: demoAdmin password: ${adminpw} jenkins.yaml

Slide 31

Slide 31 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Фичи Экспорт конфигураций CLI и REST API для конфигураций в YAML Поддержка многих плагинов “из коробки” 31

Slide 32

Slide 32 text

#jenkins_msk @oleg_nenashev, @jenkins_ru https://github.com/oleg-nenashev/demo- jenkins-config-as-code/tree/casc-plugin 32 https://github.com/jenkinsci/configuration-as-code-plugin

Slide 33

Slide 33 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 33 Задачи Jenkins as Code Job DSL Pipeline (бывш. Workflow) По-умолчанию предлагается в Jenkins 2.0 Jenkins Job Builder Groovy Groovy YAML Ещё несколько плагинов…

Slide 34

Slide 34 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 34 Automation as Code Job DSL Pipeline (бывш. Workflow) По-умолчанию предлагается в Jenkins 2.0 Jenkins Job Builder Groovy Groovy YAML Ещё несколько десятков плагинов…

Slide 35

Slide 35 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins Pipeline 35

Slide 36

Slide 36 text

Документация Примеры Средства разработки Экосистема Jenkins Pipeline Плагины: Публичные библиотеки Branch- Source, BlueOcean, ... 89 – явная поддержка в коде 44 – плагины для Pipeline

Slide 37

Slide 37 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins Pipeline - это… 1. Groovy DSL для описания задач ◦ Хранится в SCM (Jenkinsfile) ◦ Или: определяется в настройках задачи node("linux && java9") { git url:"http://github.com/myorg/myproject.git" sh "make all" } http://bit.ly/pipeline-tutorial 37

Slide 38

Slide 38 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 38

Slide 39

Slide 39 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 39 Pipeline. Шаги • Интеграции с плагинами • Системные шаги • Дополнительные библиотеки

Slide 40

Slide 40 text

#jenkins_msk @oleg_nenashev, @jenkins_ru ◦Пользователь настраивает шаг сборки в UI ◦Jenkins генерирует код для Pipeline 40 Генератор шаблонов в UI

Slide 41

Slide 41 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Основные возможности Независимость от агента и рабочей директории Параллелизация Устойчивость к рестарту мастера Устойчивость к разрывам сети Sandbox 41

Slide 42

Slide 42 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Sandbox в Pipeline ◦Script Security Plugin ◦Ограниченный доступ к низкоуровневым операциям (файлы, системные вызовы, …) ◦Ограниченный доступ к API Jenkins ◦Белый список вызовов 42

Slide 43

Slide 43 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins Pipeline - это… 1. Groovy DSL для описания задач 2. Тип задачи Pipeline Multi-Branch Pipeline Organization Folder • GitHub • BitBucket* • … 43

Slide 44

Slide 44 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 44 Pipeline Описания задач можно хранить в… • Настройках задачи • SCM => Jenkinsfile http://bit.ly/pipeline-tutorial

Slide 45

Slide 45 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Пример def imageName = 'jenkinsciinfra/ircbot’ node('docker') { checkout scm def imageTag = findTag() stage('Build ircbot’) { withMavenEnv (["BUILD_NUMBER=${env.BUILD_NUMBER}:${commit}"]) { sh 'mvn clean package verify' }} stage ('Build & Deploy container’) { def img = docker.build("${imageName}:${imageTag}”) img.push() } } https://github.com/jenkins-infra/ircbot Docker Registry Server Jenkins SCM Puppet 45

Slide 46

Slide 46 text

#jenkins_msk @oleg_nenashev, @jenkins_ru ◦В конфигурации задачи – ссылка на репозиторий ◦Git/GitHub, BitBucket, … ◦Jenkins берёт настройки из Jenkinsfile 46 Multi-Branch Pipeline

Slide 47

Slide 47 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Multi-Branch Pipeline ◦Multi-Branch – это папка, а не одна задача ◦Для веток и pull request - ОТДЕЛЬНЫЕ задачи ◦ Свои сборки ◦ Своя история ◦ Автоматическая очистка при мердже/удалении ◦Organization Folders – в GitHub/BitBucket 47

Slide 48

Slide 48 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins Pipeline - это… 1. Groovy DSL для описания задач 2. Тип задачи 3. Declarative Pipeline 48

Slide 49

Slide 49 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Синтаксический сахар над Pipeline • “pipeline { }” closure • Используется тот же движок • DSL внутри DSL 49 Declarative Pipeline https://github.com/jenkinsci/pipeline- model-definition-plugin/wiki

Slide 50

Slide 50 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Синтаксический сахар над Pipeline Секции для типовых задач • Простая настройка • Больше статического анализа • Меньше гибкость L 50 Declarative Pipeline https://github.com/jenkinsci/pipeline- model-definition-plugin/wiki

Slide 51

Slide 51 text

51 pipeline { agent label:"generic-linux" tools { maven "Maven 3.3.9" jdk "Oracle JDK 8u40" } stages { stage("build") { steps { sh 'mvn clean install -Dmaven.test.failure.ignore=true' } } } post { always { junit "path/to/xml" } failure { mail to:"[email protected]", subject:"FAILURE:${currentBuild.name}", …} } } Пример. Декларативный Pipeline

Slide 52

Slide 52 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Declarative Pipeline Scripted Pipeline и библиотеки Простые случаи Другое Что использовать? 52

Slide 53

Slide 53 text

#jenkins_msk @oleg_nenashev, @jenkins_ru BlueOcean Новый UI/UX для Pipeline… и не только https://jenkins.io/doc/book/blueocean 53

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

BlueOcean Pipeline Editor Plugin https://jenkins.io/doc/book/blueocean/pipeline-editor/ Конфигурирование из браузера

Slide 57

Slide 57 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Я - автоматизатор. Я не хочу писать плагины. Я хочу команды в Pipeline. 57

Slide 58

Slide 58 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Переиспользование кода без плагинов 2015 • load() – загрузка из workspace def pipeline node('slave') { pipeline = load 'pipeline.groovy' pipeline.functionA() } pipeline.functionB() 58

Slide 59

Slide 59 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Переиспользование кода без плагинов 2015 • load() – загрузка из workspace Начало 2016 • Global Pipeline Library • Pipeline Remote Loader Plugin def helloworld = fileLoader.fromGit( 'examples/fileLoader/helloworld', 'https://github.com/jenkinsci/workflow- remote-loader-plugin.git', 'master', credentialsID, ’linux && jumphost') helloworld.printHello() 59

Slide 60

Slide 60 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Переиспользование кода без плагинов 2015 • load() – загрузка из workspace Начало 2016 • Global Pipeline Library • Pipeline Remote Loader Plugin Конец 2016 • Pipeline Shared Libraries • Управление библиотеками • Поддержка @Grab – можно включать обычные библиотеки Структура: 60

Slide 61

Slide 61 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Pipeline Shared Libraries ◦Библиотеки лежат в SCM ◦Версионирование ◦Области видимости ◦ Весь Jenkins ◦ Folder, Job 61

Slide 62

Slide 62 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Что делать пользователям? 1. Взять компоненты из фреймворка 62

Slide 63

Slide 63 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Что делать пользователям? 1. Взять компоненты из фреймворка 2. Собрать свой велосипед Pipeline Просто добавь клея! 63

Slide 64

Slide 64 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Объявление Библиотеки [1/2] Глобальные настройки, папки my-imaginary-lib 64

Slide 65

Slide 65 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Объявление Библиотеки [2/2] https://github.com/oleg-nenashev/my-imaginary-lib 65

Slide 66

Slide 66 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Пример. Импорт 66

Slide 67

Slide 67 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Итого. Pipeline 67

Slide 68

Slide 68 text

Почему Jenkins Pipeline? ”Легко” использовать • Blue Ocean • Declarative • Multi-branch • Интеграции 68

Slide 69

Slide 69 text

Почему Jenkins Pipeline? “Легко” использовать “Легко” разрабатывать • … as Code • Snippet Generator • Документация • Pipeline Editor pipeline { agent label:"linux" tools { maven ”M3" } stages { stage("build") { steps { sh 'mvn clean verify' } } } post { always { junit ”target/…/*.xml" } } } 69

Slide 70

Slide 70 text

Почему Jenkins Pipeline? “Легко” использовать “Легко” разрабатывать “Легко” переиспользовать • Библиотеки # Jenkinsfile buildPlugin() 70

Slide 71

Slide 71 text

#jenkins_msk @oleg_nenashev, @jenkins_ru … упрощает описание простых и сложных job’ов … снижает затраты на поддержку системы … - язык программирования, нужно учить … требует средств разработки, их мало Pipeline… 71

Slide 72

Slide 72 text

#jenkins_msk @oleg_nenashev, @jenkins_ru “Легко”? Что не так? Обсудим после доклада Виктора… 72 http://bit.ly/jenkins-pipeline-user-side

Slide 73

Slide 73 text

#jenkins_msk @oleg_nenashev, @jenkins_ru А что нового в Jenkins? 73

Slide 74

Slide 74 text

#jenkins_msk @oleg_nenashev, @jenkins_ru

Slide 75

Slide 75 text

#jenkins_msk @oleg_nenashev, @jenkins_ru http://jenkins-x.io/ Jenkins X https://github.com/rawlingsj/jenkins-x-presentations 75

Slide 76

Slide 76 text

http://jenkins-x.io/

Slide 77

Slide 77 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 77

Slide 78

Slide 78 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins X из коробки ◦Свой CLI ◦Jenkins-мастер ◦Пул агентов (Kubernetes plugin) ◦Шаблоны CI/CD Pipeline (Spring и пр.) ◦Nexus, chartmuseum, monocular ◦Окружения: ◦ Локальное окружение для разработки ◦ Staging ◦ Интеграция с Production ◦Интеграция с IDE 78

Slide 79

Slide 79 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Что читать? https://jenkins-x.io/getting-started/ https://jenkins-x.io/contribute/roadmap/ https://github.com/rawlingsj/jenkins-x-presentations 79

Slide 80

Slide 80 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins Essentials 80 https://jenkins.io/blog/2018/06/26/jenkins-essentials-at-eclipsecon-france/

Slide 81

Slide 81 text

#jenkins_msk @oleg_nenashev, @jenkins_ru https://jenkins.io/blog/2018/06/26/jenkins-essentials-at-eclipsecon-france/ 81

Slide 82

Slide 82 text

#jenkins_msk @oleg_nenashev, @jenkins_ru ◦ Простота использования ◦ Работает “из коробки” ◦ Не фреймворк, Ограниченный набор стэков ◦ Документация ◦ Cloud Native: AWS, Docker ◦ Автоматический апгрейд (и откат) ◦ Сбор и репортинг ошибок ◦ CD для компонентов Основы Jenkins Essentials 82

Slide 83

Slide 83 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Ссылки ◦https://github.com/jenkins-infra/evergreen ◦https://jenkins.io/blog/2018/06/26/jenkins- essentials-at-eclipsecon-france/ ◦https://github.com/jenkinsci/jep/ ◦https://jenkins.io/blog/2018/07/10/jenkins- essentials-on-aws/ 83

Slide 84

Slide 84 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Итого != 84

Slide 85

Slide 85 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Итого ◦Jenkins – это не CRON с web-интерфейсом ◦Jenkins в 2018 – это не Jenkins в 2012 ◦Проект Jenkins набирает обороты 85

Slide 86

Slide 86 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Что пробовать? ◦Jenkins Pipeline ◦Библиотеки Pipeline ◦Configuration-as-Code Plugin ◦Jenkins X, если у Вас Kubernetes 86

Slide 87

Slide 87 text

#jenkins_msk @oleg_nenashev, @jenkins_ru https://jenkins.io/participate/ 87

Slide 88

Slide 88 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Русскоязычное сообщество Jenkins Митапы: ◦Москва, СПб, Минск ◦Ярославль Gitter: #jenkinsci-ru/public YouTube: http://bit.ly/jenkins-ru-youtube Facebook: http://bit.ly/jenkins-ru-facebook Twitter: @jenkins_ru Москва: Здесь может быть Ваше лого 88

Slide 89

Slide 89 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Митап в Ярославле 89 https://www.meetup.com/Yaroslavl-Jenkins-Meetup/

Slide 90

Slide 90 text

#jenkins_msk @oleg_nenashev, @jenkins_ru ВОПРОСЫ? Offline: • https://gitter.im/jenkinsci-ru/public E-mail: [email protected] GitHub: oleg-nenashev Twitter: @oleg_nenashev