Slide 1

Slide 1 text

Moscow Jenkins Meetup #4 19 июля 2018 @jenkins_ru, #jenkins_msk State of Jenkins Олег Ненашев CloudBees

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

2.72.x ◦Security-патчи в .2 и .3 ◦ Command Launcher – теперь со Script Security ◦ Патч Commons HttpClient 3.1 в ядре – риск MiTM ◦ XSS в автодополнении джобов ◦ Валидация части паролей через GET ◦Апгрейд Jetty, SPDY больше не поддерживается ◦Протоколы JNLP 1/2/3 больше не поддерживаются ◦… Что нового? > Ядро Плагины JEP События https://jenkins.io/doc/upgrade-guide/ https://jenkins.io/changelog-stable/ https://jenkins.io/security/advisory/2017-10-11/ https://jenkins.io/security/advisory/2017-11-08/ Предыдущая попытка 4

Slide 5

Slide 5 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk 5

Slide 6

Slide 6 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk 6

Slide 7

Slide 7 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk •Что нового в Jenkins? •Обсуждение текущих проектов: Jenkins X, Jenkins Essentials, Configuration as Code plugin, Java 10/11, … План доклада 7

Slide 8

Slide 8 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Jenkins Configuration-as-Code 8

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Мой прошлый доклад http://bit.ly/jenkins_msk_3_groovy_hooks 10

Slide 11

Slide 11 text

Groovy!

Slide 12

Slide 12 text

Groovy! #ornot

Slide 13

Slide 13 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Groovy-хуки. Ограничения Нужно работать с API Jenkins и Плагинов Javadoc есть не везде… Публичных UI не хватает… Нет экспорта конфигурации 13

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk JCasC и Groovy-хуки JOBS_LOADED EXTENSIONS_AUGMENTED COMPLETED Groovy Hooks: init() JCasC PLUGINS_STARTED . . . • Groovy-хуки вызываются после JCasC • Тюнинг конфигурации: • Workaround для отсутствующих интеграций • Динамические скрипты • Прочитать volume и сделать что-то • Конфигурирование задач и миграция данных 17

Slide 18

Slide 18 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk https://github.com/oleg-nenashev/demo- jenkins-config-as-code/tree/casc-plugin 18

Slide 19

Slide 19 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Сравнение JCasC Groovy-хуки YAML – декларативное описание Легко освоить Не все плагины поддерживаются Нет отката конфигураций Изменение конфигов без рестарта Отладка затруднена Export from UI CLI and REST API для конфигурации Только статическая конфигурация Groovy – универсальный ООП язык Тяжело освоить Может сделать всё Совместим если API стабильно Нет отката конфигураций Апдейт через рестарт Нет экспорта конфигураций Отладка через IDE 19

Slide 20

Slide 20 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Cloud Native Jenkins 20

Slide 21

Slide 21 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Cloud Native Jenkins ◦Cloud Native SIG ◦https://jenkins.io/sigs/cloud-native/ ◦Cloud Native Jenkins Summit в феврале ◦Начинаем с Pluggable Storage 21

Slide 22

Slide 22 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk •Обсуждался на Jenkins World 2016 •Основные entity: ◦Артефакты ◦Логи ◦Конфигурации ◦Сборки: результаты тестов и т.п. ◦Fingerprints ◦… Pluggable Storage для Jenkins 22

Slide 23

Slide 23 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Артефакты JEP-202 – External Artifact Storage Новые API в Ядре Jenkins и Pipeline Реализация: Artifact Manager for S3 ◦https://github.com/jenkinsci/artifact-manager-s3-plugin ◦Интеграция с Pipeline ◦Прозрачная поддержка archive/unarchive ◦Прозрачная поддержка stash/unstash 23

Slide 24

Slide 24 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Логи в Jenkins Логи сборок Системные логи Другое • Логи агентов • Поллинг SCM • Индексирование в Multibranch • … java.util.logging 24

Slide 25

Slide 25 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Текущая ситуация Агенты Логи с операций на мастере Build Console • Все логи идут на диск мастера • Агенты отправляют логи на мастер • Логи для консоли… читаются с диска (и progressive, да) Мастер 25

Slide 26

Slide 26 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Внешние логи. Подход Агенты Logstash Elasticsearch Логи с мастера Логи с агентов Build Console • Убрать все логи в общее хранилище • Не нагружать мастер Storage Мастер 26

Slide 27

Slide 27 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Внешние логи. Прототип ◦https://github.com/jenkinsci/custom-war- packager/tree/master/demo/external-logging-elasticsearch ◦Основан на прототипах 2016г ◦Патчи Pipeline и Logstash Plugin ◦Внутри: Docker/Docker Compose, Elasticsearch, Groovy- хуки, Custom WAR Packager ◦“make clean build”, “make run”, “make agent” 27

Slide 28

Slide 28 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Конфигурации ◦Конфигурации в Jenkins хранятся по-разному L ◦XmlFile покрывает 95% кейсов ◦Есть прототипы ◦https://github.com/jenkinsci/jenkins/pull/3393 ◦https://github.com/jstrachan/jenkins/tree/kubeify (Fabric8) 28

Slide 29

Slide 29 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Pluggable Storage. Планы… Будут обсуждаться в Cloud Native SIG 29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

http://jenkins-x.io/

Slide 32

Slide 32 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk 32

Slide 33

Slide 33 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Что дает? ◦Работает “из коробки” ◦CLI для всего ◦Поддержка окружений ◦Управление конфигурацией через GitOps ◦Интеграция со средствами разработки ◦Расширяется через Kubernetes 33

Slide 34

Slide 34 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Quickstart > brew install jx > jx install > jx create quickstart ◦ (или jx create spring, jx import) ◦ Создает Git-репозиторий ◦ Регистрирует web-хуки ◦ Создание образов для запуска в Kubernetes ◦ Запускает первый Pipeline 34

Slide 35

Slide 35 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Jenkins X из коробки ◦Jenkins-мастер ◦Пул агентов (Kubernetes plugin) ◦Nexus, charmuseum, monocular ◦Окружения: ◦ Локальное окружение для разработки ◦ Staging ◦ Интеграция с Production ◦Интеграция с IDE 35

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk • Evergreen • Улучшения для всех Jenkins Essentials 40

Slide 41

Slide 41 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk ◦ Automated Sane Defaults ◦ Cloud Native: AWS, Docker ◦ Automatically Upgrading Distribution ◦ И rollback… ◦ Connected: Telemetry & Feedback ◦ Obvious Path To User Success ◦ Opinionated ◦ Clear out obstacles ◦ Documentation Основы Essentials 41

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Evergreen – открытое решение Open Source Open Design Open Development Open Community https://github.com/jenkins-infra/evergreen/#the-four-opens 43

Slide 44

Slide 44 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Архитектура Essentials Essentials Instance evergreen -client регистрация аутентификация update manifest update level = 1. Client downloads WAR, plugins, client update, etc. installs, triggers restart then health-checks Backend Services evergreen.jenkins.io 44

Slide 45

Slide 45 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk • Evergreen • Улучшения для всех Jenkins Essentials 45

Slide 46

Slide 46 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk CD для ядра и плагинов ◦Incrementals (JEP-305) ◦Мастер-ветки и пулл-реквесты публикуются в Artifactory https://jenkins.io/blog/2018/05/15/incremental-deployment/ 46

Slide 47

Slide 47 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Incrementals - использование ◦Нет в обычном Update Center ◦Можно скачать с Artifactory ◦Поддержка в официальных образах Docker # plugins.txt workflow-aggregator:2.5 incrementals;org.jenkins-ci.plugins.workflow;2.19-rc289.d09828a05a74 configuration-as-code:experimental 47

Slide 48

Slide 48 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Апдейт ci.jenkins.io – essentialsTest() ◦Work-in-progress ◦Новый движок для CI/CD плагинов в ci.Jenkins.io ◦ Pipeline Library ◦ https://github.com/jenkins-infra/pipeline-library/blob/master/vars/essentialsTest.groovy ◦Интеграционные тесты во время сборки плагинов ◦ Plugin Compat Tester ◦ Acceptance Test Harness 48

Slide 49

Slide 49 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Ссылки ◦https://github.com/jenkins-infra/evergreen ◦https://github.com/jenkinsci/jep/ 49

Slide 50

Slide 50 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Поддержка Java 10 и 11 50

Slide 51

Slide 51 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk • Jenkins поддерживает только Java 8 • Java 11 на подходе • Онлайн-хакатон в июне Поддержка Java 10 и 11 51

Slide 52

Slide 52 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk •Апдейты библиотек •Апдейты Maven-стэка для разработчиков Jenkins Java 10+. Что сделали? http://bit.ly/jenkins-java10-hackathon-summary 52

Slide 53

Slide 53 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Java 10/11 – превью-версии Vanilla: ◦ > docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins- experimental:latest-jdk10 С Pipeline и BlueOcean: ◦ > docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins- experimental:blueocean-jdk10 Больше опций: https://jenkins.io/blog/2018/06/17/running- jenkins-with-java10-11/ 53

Slide 54

Slide 54 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Pipeline ● Pipeline заработал! ● Патчи в ядре и Pipeline: Support https://jenkins.io/blog/2018/06/19/jenkins-java10-hackathon-day2/ 54

Slide 55

Slide 55 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Java 10+. Выводы ● Поддержка Java 10 не так страшна, как казалась ● Апдейты библиотек, и “все заработало” ● Проблемы с dev-тулами: Multi-release JAR, ASM ● Illegal Reflective Access (setAccessible(true))… ● Multi-release JAR есть, а Multi-release WAR нет ● Другое: JAXB в Java 11, Java Web Start для агентов ● Jenkins JEP-211: General Availability в Jenkins 55

Slide 56

Slide 56 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk И всё? 56

Slide 57

Slide 57 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk •Special Interest Groups (SIGs) А что ещё? https://jenkins.io/sigs/ 57

Slide 58

Slide 58 text

https://jenkins.io/sigs/

Slide 59

Slide 59 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk •Special Interest Groups (SIGs) •BlueOcean Extensibility ◦ JEP-204 – BlueOcean Extensibility API ◦ JEP-203 – BlueOcean Extensibility А что ещё? 59

Slide 60

Slide 60 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk •Special Interest Groups (SIGs) •BlueOcean Extensibility •Google Summer of Code А что ещё? 60

Slide 61

Slide 61 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Google Summer of Code Три проекта Code Coverage API Plugin Remoting через Kafka Simple Pull Request Job (aka Pipeline as YAML) 61

Slide 62

Slide 62 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Итого != 62

Slide 63

Slide 63 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk https://jenkins.io/participate/ 63

Slide 64

Slide 64 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk Обсудим: А что не так в Jenkins? 64

Slide 65

Slide 65 text

#jenkins_msk @oleg_nenashev, #Jenkins_msk ВОПРОСЫ? Offline: • https://gitter.im/jenkinsci-ru/public • @jenkins_ru @oleg_nenashev oleg-nenashev