Slide 1

Slide 1 text

Старый Jenkins, Новый Jenkins Олег Ненашев (@oleg_nenashev) Jenkins project / CloudBees Нижний Новгород, 20 апреля, 2019

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Митап в Нижнем Новгороде 5 meetup.com/Nizhny-Novgorod-Jenkins-Meetup/ Здесь может быть Ваше лого https://t.me/jenkins_nn

Slide 6

Slide 6 text

#jenkins_msk @oleg_nenashev, @jenkins_ru О чём доклад? ◦Кто такой Jenkins? ◦Что нового в проекте? ◦Чего ждать? ◦Q&A 6

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Поддерживать Jenkins – это сложно • Фреймворк требует настройки • Кастомизации • Множество компонентов

Slide 20

Slide 20 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Кривая обучения Скрипты, CRON Плагины Advanced-фичи, Свои плагины 20

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Масштабируемость ограничена 22 Нода 1 Нода 2 Нода N . . . • Мастер решает большую часть задач • Удалённые задачи на агентах ВСЕГДА нагружают мастер • Ввод-вывод на мастере

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Инфра- структура агентов Сервисы Конфиги Инфра- структура Шаб- лоны 24

Slide 25

Slide 25 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Проблемы роста 25 Jenkins рос быстрее Dev-комьюнити

Slide 26

Slide 26 text

#jenkins_msk @oleg_nenashev, @jenkins_ru >10 лет совместимости 26 • Плагины для Hudson 2 ещё работают! • НО: • Архитектурные проблемы • Старые библиотеки • Устаревший UI • Интеграционные проблемы в плагинах • Security-апдейты

Slide 27

Slide 27 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Back to the Future… 2015? 2018? 27

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

#jenkins_msk @oleg_nenashev, @jenkins_ru CI/CD стал проще! 29 Jenkins тоже изменился

Slide 30

Slide 30 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins сейчас 30 •Новые подпроекты •Configuration as Code • Jenkins Pipeline • Системные конфигурации • Контейнеры

Slide 31

Slide 31 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Configuration-as-Code 31

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Задачи Jenkins as Code Job DSL Pipeline (бывш. Workflow) Jenkins Job Builder Groovy Groovy YAML Ещё несколько плагинов… 34

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins Pipeline 36

Slide 37

Slide 37 text

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

Slide 38

Slide 38 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 38

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 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" } } } 43

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 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 47

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Declarative Pipeline 51

Slide 52

Slide 52 text

52 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:"me@ema.il", subject:"FAILURE:${currentBuild.name}", …} } } Пример. Декларативный Pipeline

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 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 59

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Контейнеры 63

Slide 64

Slide 64 text

#jenkins_msk @oleg_nenashev, @jenkins_ru CI/CD. А зачем контейнеры? Config Management Fast provisioning Clean environments Disposability Clustering 64

Slide 65

Slide 65 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 65

Slide 66

Slide 66 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins & Docker. Packaging https://hub.docker.com/r/jenkins/ 66

Slide 67

Slide 67 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Официальный образ: jenkins/jenkins docker run --rm \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ jenkins/jenkins:lts Гайд: https://batmat.net/2018/09/07/how-to-run-and- upgrade-jenkins-using-the-official-docker-image/ 67

Slide 68

Slide 68 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Агенты • jenkins/slave – базовый образ с Remoting • jenkins/jnlp-slave – JNLP-агенты • jenkins/ssh-slave – SSH build-агенты • jenkins/remoting-kafka-agent – Remoting Kafka Plugin https://hub.docker.com/r/jenkins/ 68

Slide 69

Slide 69 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins & Docker. Plugins Docker Plugin Docker Pipeline Plugin Docker Custom Build Environment Plugin … Yet Another Docker Plugin … 69

Slide 70

Slide 70 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Example: Docker Pipeline Plugin https://plugins.jenkins.io/docker-workflow docker.image('onenashev/gcc-riscv:6.4-rc').inside { checkout scm sh "make clean test" } 70

Slide 71

Slide 71 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Kubernetes Plugin Kubernetes Pipeline Plugin Kubernetes Credentials Plugin … 71

Slide 72

Slide 72 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Kubernetes Plugin def label = "gcc-riscv-${UUID.randomUUID().toString()}" podTemplate(name: 'test', label: label, containers: [ containerTemplate(name: 'gcc-riscv', image: 'onenashev/gcc-riscv:6.4-rc’, resourceRequestCpu: ‘2’, resourceLimitMemory: ‘8Gi' ttyEnabled: true, command: 'cat')]) { node(label) { checkout scm sh "make clean test" step([$class: 'TapPublisher', testResults: 'output/test/report.tap', ...]) } } https://plugins.jenkins.io/kubernetes 72

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

Aug 31, 2018 – Kohsuke Kawaguchi, “Jenkins: Shifting Gears” https://jenkins.io/blog/2018/08/31/shifting-gears/ Slides: https://drive.google.com/file/d/160LjRKw42XXuXT2n4j8BLCzsSL5z2m2_/view

Slide 75

Slide 75 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Shifting Gears: Our Amazing Success Extensible General Purpose Community 75 https://flic.kr/p/5FawSa © 2018 CloudBees, Inc. All Rights Reserved

Slide 76

Slide 76 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Shifting Gears: Making Changes 76 © 2018 CloudBees, Inc. All Rights Reserved

Slide 77

Slide 77 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Cloud Native Jenkins “General purpose CI/CD engine that runs on Kubernetes and embraces fundamentally different architecture & extensibility mechanisms” 77 https://flic.kr/p/75ncBF Kohsuke Kawaguchi

Slide 78

Slide 78 text

#jenkins_msk @oleg_nenashev, @jenkins_ru ● Best service for each need ● Pay per use ● “Infinite” scaling ● Easy to use ● Fast to develop https://flic.kr/p/75ncBF 78 Cloud Native Jenkins

Slide 79

Slide 79 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Cloud Native Special Interest Group ● Founded in July 2018 ● https://jenkins.io/sigs/cloud-native ● https://gitter.im/jenkinsci/cloud-native-sig Goal: Improve Jenkins to run on Cloud environments as a "Cloud Native" application ? 79

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

http://jenkins-x.io/

Slide 82

Slide 82 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 82

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

#jenkins_msk @oleg_nenashev, @jenkins_ru CommentOps 84

Slide 85

Slide 85 text

#jenkins_msk @oleg_nenashev, @jenkins_ru 85 Статические мастеры Serverless

Slide 86

Slide 86 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Serverless Jenkins X 86 https://medium.com/@jdrawlings/ser verless-jenkins-with-jenkins-x- 9134cbfe6870 Serverless Jenkins with Jenkins X

Slide 87

Slide 87 text

87 https://medium.com/@jdrawlings/serverless- jenkins-with-jenkins-x-9134cbfe6870 Jenkinsfile Runner is Here Jenkinsfile Runner

Slide 88

Slide 88 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins X Serverless Build flow Single-shot masters build flow 88

Slide 89

Slide 89 text

#jenkins_msk @oleg_nenashev, @jenkins_ru FKA “KNative” https://jenkins-x.io/news/jenkins-x-next-gen- pipeline-engine/ Используется по-умолчанию в Jenkins X 2.0 89

Slide 90

Slide 90 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 https://jenkins-x.io/news 90

Slide 91

Slide 91 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Что дальше? 91

Slide 92

Slide 92 text

Continuous Delivery Foundation (CDF)

Slide 93

Slide 93 text

Участники PREMIER GENERAL AND END USER MEMBERS 93

Slide 94

Slide 94 text

Linux Foundation – это не только Linux... Automotive Networking Cloud Security Blockchain Web Embedded 94

Slide 95

Slide 95 text

CDF Mission ● CDF believes in the power of Continuous Delivery to empower developers and teams and to produce high quality software more rapidly ● CDF believes in the open-source solutions collectively addressing the whole Software Delivery LifeCycle ● CDF fosters and sustains the ecosystem of open-source, vendor neutral projects through collaborations and interoperability ● CDF advocates this idea and encourages collaborations among practitioners to share and improve their practices 95

Slide 96

Slide 96 text

Проекты в CDF ● Jenkins: https://github.com/jenkinsci ● Jenkins-X: https://github.com/jenkins-x ● Spinnaker: https://github.com/spinnaker ● Tekton: https://github.com/tektoncd 96

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

#jenkins_msk @oleg_nenashev, @jenkins_ru Ищем контрибьюторов https://jenkins.io/participate/ 102

Slide 103

Slide 103 text

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