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

Yaroslavl JAM. Who is Mr. Jenkins? (RUS)

Yaroslavl JAM. Who is Mr. Jenkins? (RUS)

Вводный доклад в Jenkins. Поговорим о том, что представляет из себя этот сервер автоматизации, и о том, как он меняется со временем. Поговорим о Jenkins Pipeline и таких новых проектах, как Jenkins X и Jenkins Essentials.

Oleg Nenashev

July 20, 2018
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

  1. #jenkins_msk @oleg_nenashev, @jenkins_ru О чём доклад? ◦Кто такой Jenkins? ◦Pipeline

    и Configuration-as-Code ◦Что нового в проекте? Немного о Jenkins X и Essentials ◦Q&A 2
  2. #jenkins_msk @oleg_nenashev, @jenkins_ru > whoami -jenkins Использую Hudson/Jenkins с 2008го

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

    Hudson • 2008: Duke's Choice Award • 2011: Переименование в Jenkins • 2012: Самый популярный сервер непрерывной интеграции • 2015: >100к активных инсталляций • 2015: 1200 плагинов 7
  5. #jenkins_msk @oleg_nenashev, @jenkins_ru 1. Один из наиболее популярных CI/CD тулов

    2. Open-source проект 3. Большое сообщество 4. Интеграции 5. Коммерческая поддержка (опц.) Кто такой Jenkins? https://jenkins.io 8
  6. #jenkins_msk @oleg_nenashev, @jenkins_ru Популярность Jenkins 9 http://stats.jenkins-ci.org/jenkins-stats/ • >170.000 активных

    инсталляций • ~500 коммиттеров за полгода • ~3 новых плагина в неделю • ~30 релизов плагинов в неделю
  7. #jenkins_msk @oleg_nenashev, @jenkins_ru Интеграции >1200 плагинов Интеграция с сотнями тулов

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

    Сервисы Плагины Конфиги Инфра- структура Бэкенд Шаб- лоны Система на базе Jenkins
  9. #jenkins_msk @oleg_nenashev, @jenkins_ru 7 лет назад… Failover ◦ Naginator-плагин Воспроизводимость

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

    между задачами • Трекинг компонентов • Сложные конфигурации • Дупликация • Сложность поддержки • Ошибки 22
  11. #jenkins_msk @oleg_nenashev, @jenkins_ru [X] as code – зачем оно нужно?

    Хранение [X] вместе с проектом Отслеживание изменений Тестирование [X] вместе с проектом 25 [X] – Configuration, Documentation, Pipeline… Everything!
  12. #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
  13. #jenkins_msk @oleg_nenashev, @jenkins_ru Новый плагин: Jenkins Configuration-as-Code Альфа версии –

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

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

    для конфигураций в YAML Поддержка многих плагинов “из коробки” 31
  16. #jenkins_msk @oleg_nenashev, @jenkins_ru 33 Задачи Jenkins as Code Job DSL

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

    (бывш. Workflow) По-умолчанию предлагается в Jenkins 2.0 Jenkins Job Builder Groovy Groovy YAML Ещё несколько десятков плагинов…
  18. Документация Примеры Средства разработки Экосистема Jenkins Pipeline Плагины: Публичные библиотеки

    Branch- Source, BlueOcean, ... 89 – явная поддержка в коде 44 – плагины для Pipeline
  19. #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
  20. #jenkins_msk @oleg_nenashev, @jenkins_ru 39 Pipeline. Шаги • Интеграции с плагинами

    • Системные шаги • Дополнительные библиотеки
  21. #jenkins_msk @oleg_nenashev, @jenkins_ru ◦Пользователь настраивает шаг сборки в UI ◦Jenkins

    генерирует код для Pipeline 40 Генератор шаблонов в UI
  22. #jenkins_msk @oleg_nenashev, @jenkins_ru Основные возможности Независимость от агента и рабочей

    директории Параллелизация Устойчивость к рестарту мастера Устойчивость к разрывам сети Sandbox 41
  23. #jenkins_msk @oleg_nenashev, @jenkins_ru Sandbox в Pipeline ◦Script Security Plugin ◦Ограниченный

    доступ к низкоуровневым операциям (файлы, системные вызовы, …) ◦Ограниченный доступ к API Jenkins ◦Белый список вызовов 42
  24. #jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins Pipeline - это… 1. Groovy DSL

    для описания задач 2. Тип задачи Pipeline Multi-Branch Pipeline Organization Folder • GitHub • BitBucket* • … 43
  25. #jenkins_msk @oleg_nenashev, @jenkins_ru 44 Pipeline Описания задач можно хранить в…

    • Настройках задачи • SCM => Jenkinsfile http://bit.ly/pipeline-tutorial
  26. #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
  27. #jenkins_msk @oleg_nenashev, @jenkins_ru ◦В конфигурации задачи – ссылка на репозиторий

    ◦Git/GitHub, BitBucket, … ◦Jenkins берёт настройки из Jenkinsfile 46 Multi-Branch Pipeline
  28. #jenkins_msk @oleg_nenashev, @jenkins_ru Multi-Branch Pipeline ◦Multi-Branch – это папка, а

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

    для описания задач 2. Тип задачи 3. Declarative Pipeline 48
  30. #jenkins_msk @oleg_nenashev, @jenkins_ru Синтаксический сахар над Pipeline • “pipeline {

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

    задач • Простая настройка • Больше статического анализа • Меньше гибкость L 50 Declarative Pipeline https://github.com/jenkinsci/pipeline- model-definition-plugin/wiki
  32. 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
  33. #jenkins_msk @oleg_nenashev, @jenkins_ru Переиспользование кода без плагинов 2015 • load()

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

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

    ◦Версионирование ◦Области видимости ◦ Весь Jenkins ◦ Folder, Job 61
  37. #jenkins_msk @oleg_nenashev, @jenkins_ru Что делать пользователям? 1. Взять компоненты из

    фреймворка 2. Собрать свой велосипед Pipeline Просто добавь клея! 63
  38. Почему 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
  39. #jenkins_msk @oleg_nenashev, @jenkins_ru … упрощает описание простых и сложных job’ов

    … снижает затраты на поддержку системы … - язык программирования, нужно учить … требует средств разработки, их мало Pipeline… 71
  40. #jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins X из коробки ◦Свой CLI ◦Jenkins-мастер

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

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

    web-интерфейсом ◦Jenkins в 2018 – это не Jenkins в 2012 ◦Проект Jenkins набирает обороты 85
  43. #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