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

Jenkins Nizhny Novgorod - Old Jenkins, New Jenk...

Jenkins Nizhny Novgorod - Old Jenkins, New Jenkins (Rus)

Первая версия Hudson появилась почти 15 лет назад, и с тех пор Jenkins непрерывно развивается. Я расскажу о текущем состоянии проекта. Что изменилось в экосистеме Jenkins за последнее время? На какие проекты нужно смотреть? И что меняется в проекте с Continuous Delivery Foundation?

Страница митапа: https://www.meetup.com/Nizhny-Novgorod-Jenkins-Meetup/events/260143937/

Oleg Nenashev

April 20, 2019
Tweet

More Decks by Oleg Nenashev

Other Decks in Programming

Transcript

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

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

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

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

    Управление процессами автоматизации Автоматизация любых задач Code & Commit Build & Config Scan & Test Release Deploy 10
  6. #jenkins_msk @oleg_nenashev, @jenkins_ru Популярность Jenkins 11 http://stats.jenkins-ci.org/jenkins-stats/ • >200.000 активных

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

    Сервисы Конфиги Инфра- структура Шаб- лоны Система на базе Jenkins
  8. #jenkins_msk @oleg_nenashev, @jenkins_ru Масштабируемость ограничена 22 Нода 1 Нода 2

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

    • Трекинг компонентов • Сложные конфигурации • Дупликация • Сложность поддержки • Ошибки 23
  10. #jenkins_msk @oleg_nenashev, @jenkins_ru >10 лет совместимости 26 • Плагины для

    Hudson 2 ещё работают! • НО: • Архитектурные проблемы • Старые библиотеки • Устаревший UI • Интеграционные проблемы в плагинах • Security-апдейты
  11. #jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins сейчас 30 •Новые подпроекты •Configuration as

    Code • Jenkins Pipeline • Системные конфигурации • Контейнеры
  12. #jenkins_msk @oleg_nenashev, @jenkins_ru [X] as code – зачем оно нужно?

    Хранение [X] вместе с проектом Отслеживание изменений Тестирование [X] вместе с проектом 32 [X] – Configuration, Documentation, Pipeline… Everything!
  13. #jenkins_msk @oleg_nenashev, @jenkins_ru Задачи Jenkins as Code Job DSL Pipeline

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

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

    Branch- Source, BlueOcean, ... 89 – явная поддержка в коде 44 – плагины для Pipeline
  16. #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
  17. #jenkins_msk @oleg_nenashev, @jenkins_ru Основные возможности Независимость от агента и рабочей

    директории Параллелизация Устойчивость к рестарту мастера Устойчивость к разрывам сети Sandbox 39
  18. #jenkins_msk @oleg_nenashev, @jenkins_ru 41 Pipeline. Шаги • Интеграции с плагинами

    • Системные шаги • Дополнительные библиотеки
  19. Почему 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
  20. #jenkins_msk @oleg_nenashev, @jenkins_ru ◦ Пользователь настраивает шаг сборки в UI

    ◦ Jenkins генерирует код для Pipeline 44 Генератор шаблонов в UI
  21. #jenkins_msk @oleg_nenashev, @jenkins_ru 46 Pipeline Описания задач можно хранить в…

    • Настройках задачи • SCM => Jenkinsfile http://bit.ly/pipeline-tutorial
  22. #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
  23. #jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins Pipeline - это… 1. Groovy DSL

    для описания задач 2. Тип задачи Pipeline Multi-Branch Pipeline Organization Folder • GitHub • BitBucket* • … 48
  24. #jenkins_msk @oleg_nenashev, @jenkins_ru ◦В конфигурации задачи – ссылка на репозиторий

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

    не одна задача ◦Для веток и pull request - ОТДЕЛЬНЫЕ задачи ◦ Свои сборки ◦ Своя история ◦ Автоматическая очистка при мердже/удалении ◦Organization Folders – в GitHub/BitBucket 50
  26. 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:"[email protected]", subject:"FAILURE:${currentBuild.name}", …} } } Пример. Декларативный Pipeline
  27. #jenkins_msk @oleg_nenashev, @jenkins_ru Синтаксический сахар над Pipeline • “pipeline {

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

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

    … снижает затраты на поддержку системы … - язык программирования, нужно учить … требует средств разработки, их мало Pipeline… 56
  30. #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
  31. #jenkins_msk @oleg_nenashev, @jenkins_ru Новый плагин: Jenkins Configuration-as-Code Альфа версии –

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

    securityRealm: local: allowsSignup: false users: - id: demoAdmin password: ${adminpw} jenkins.yaml
  33. #jenkins_msk @oleg_nenashev, @jenkins_ru Полезные фичи Экспорт конфигураций из Jenkins CLI

    и REST API для конфигураций в YAML Валидация конфигов, dry-run Поддержка многих плагинов “из коробки” 62
  34. #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
  35. #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
  36. #jenkins_msk @oleg_nenashev, @jenkins_ru Jenkins & Docker. Plugins Docker Plugin Docker

    Pipeline Plugin Docker Custom Build Environment Plugin … Yet Another Docker Plugin … 69
  37. #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
  38. 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
  39. #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
  40. #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
  41. #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
  42. #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
  43. #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
  44. 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
  45. Проекты в CDF • Jenkins: https://github.com/jenkinsci • Jenkins-X: https://github.com/jenkins-x •

    Spinnaker: https://github.com/spinnaker • Tekton: https://github.com/tektoncd 96
  46. #jenkins_msk @oleg_nenashev, @jenkins_ru Итого ◦Jenkins – это не CRON с

    web-интерфейсом ◦Jenkins в 2018 – это не Jenkins в 2012 ◦Проект Jenkins набирает обороты 100