Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moscow Jenkins Meetup #4. State of Jenkins (Rus)

Moscow Jenkins Meetup #4. State of Jenkins (Rus)

Обзор состояния Jenkins и текущих проектов: Configuration as Code, Cloud Native Jenkins, Jenkins X, Jenkins Essentials, поддержка Java 10, и многое другое

Oleg Nenashev

July 19, 2018
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

  1. #jenkins_msk @oleg_nenashev, #Jenkins_msk > whoami -jenkins Использую Hudson/Jenkins с 2008го

    Коммиттер с 2012го Сейчас: • Мейнтейнер ядра • Организатор митапов Работаю в CloudBees • CloudBees Core • CloudBees Jenkins Support @oleg_nenashev oleg-nenashev 3
  2. 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
  3. #jenkins_msk @oleg_nenashev, #Jenkins_msk •Что нового в Jenkins? •Обсуждение текущих проектов:

    Jenkins X, Jenkins Essentials, Configuration as Code plugin, Java 10/11, … План доклада 7
  4. #jenkins_msk @oleg_nenashev, #Jenkins_msk Groovy-хуки. Ограничения Нужно работать с API Jenkins

    и Плагинов Javadoc есть не везде… Публичных UI не хватает… Нет экспорта конфигурации 13
  5. #jenkins_msk @oleg_nenashev, #Jenkins_msk Новый плагин: Jenkins Configuration-as-Code •Альфа версии –

    с февраля •Конфигурация через YAML •https://github.com/jenkinsci/conf iguration-as-code-plugin 14
  6. jenkins: systemMessage: "JCasC Demo" numExecutors: 1 scmCheckoutRetryCount: 4 mode: NORMAL

    securityRealm: local: allowsSignup: false users: - id: demoAdmin password: ${adminpw} jenkins.yaml
  7. #jenkins_msk @oleg_nenashev, #Jenkins_msk Фичи •Экспорт конфигураций •CLI и REST API

    для конфигураций в YAML •Поддержка многих плагинов “из коробки” 16
  8. #jenkins_msk @oleg_nenashev, #Jenkins_msk JCasC и Groovy-хуки JOBS_LOADED EXTENSIONS_AUGMENTED COMPLETED Groovy

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

    Легко освоить Не все плагины поддерживаются Нет отката конфигураций Изменение конфигов без рестарта Отладка затруднена Export from UI CLI and REST API для конфигурации Только статическая конфигурация Groovy – универсальный ООП язык Тяжело освоить Может сделать всё Совместим если API стабильно Нет отката конфигураций Апдейт через рестарт Нет экспорта конфигураций Отладка через IDE 19
  10. #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
  11. #jenkins_msk @oleg_nenashev, #Jenkins_msk •Обсуждался на Jenkins World 2016 •Основные entity:

    ◦Артефакты ◦Логи ◦Конфигурации ◦Сборки: результаты тестов и т.п. ◦Fingerprints ◦… Pluggable Storage для Jenkins 22
  12. #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
  13. #jenkins_msk @oleg_nenashev, #Jenkins_msk Логи в Jenkins Логи сборок Системные логи

    Другое • Логи агентов • Поллинг SCM • Индексирование в Multibranch • … java.util.logging 24
  14. #jenkins_msk @oleg_nenashev, #Jenkins_msk Текущая ситуация Агенты Логи с операций на

    мастере Build Console • Все логи идут на диск мастера • Агенты отправляют логи на мастер • Логи для консоли… читаются с диска (и progressive, да) Мастер 25
  15. #jenkins_msk @oleg_nenashev, #Jenkins_msk Внешние логи. Подход Агенты Logstash Elasticsearch Логи

    с мастера Логи с агентов Build Console • Убрать все логи в общее хранилище • Не нагружать мастер Storage Мастер 26
  16. #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
  17. #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
  18. #jenkins_msk @oleg_nenashev, #Jenkins_msk Что дает? ◦Работает “из коробки” ◦CLI для

    всего ◦Поддержка окружений ◦Управление конфигурацией через GitOps ◦Интеграция со средствами разработки ◦Расширяется через Kubernetes 33
  19. #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
  20. #jenkins_msk @oleg_nenashev, #Jenkins_msk Jenkins X из коробки ◦Jenkins-мастер ◦Пул агентов

    (Kubernetes plugin) ◦Nexus, charmuseum, monocular ◦Окружения: ◦ Локальное окружение для разработки ◦ Staging ◦ Интеграция с Production ◦Интеграция с IDE 35
  21. #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
  22. #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
  23. #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
  24. #jenkins_msk @oleg_nenashev, #Jenkins_msk CD для ядра и плагинов ◦Incrementals (JEP-305)

    ◦Мастер-ветки и пулл-реквесты публикуются в Artifactory https://jenkins.io/blog/2018/05/15/incremental-deployment/ 46
  25. #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
  26. #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
  27. #jenkins_msk @oleg_nenashev, #Jenkins_msk • Jenkins поддерживает только Java 8 •

    Java 11 на подходе • Онлайн-хакатон в июне Поддержка Java 10 и 11 51
  28. #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
  29. #jenkins_msk @oleg_nenashev, #Jenkins_msk Pipeline • Pipeline заработал! • Патчи в

    ядре и Pipeline: Support https://jenkins.io/blog/2018/06/19/jenkins-java10-hackathon-day2/ 54
  30. #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
  31. #jenkins_msk @oleg_nenashev, #Jenkins_msk •Special Interest Groups (SIGs) •BlueOcean Extensibility ◦

    JEP-204 – BlueOcean Extensibility API ◦ JEP-203 – BlueOcean Extensibility А что ещё? 59
  32. #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