62
Pipeline для инженеров. Обзор экосистемы и никакого маркетинга Олег Ненашев, CloudBees, Inc. Moscow Jenkins Meetup #1, 2 ноября 2016 Oleg Nenashev (@oleg_nenashev) CloudBees, Inc.

Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

Embed Size (px)

Citation preview

Page 1: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

Pipeline для инженеров. Обзор экосистемы и никакого маркетинга

Олег Ненашев,CloudBees, Inc.

Moscow Jenkins Meetup #1,2 ноября 2016

Oleg Nenashev (@oleg_nenashev)CloudBees, Inc.

Page 2: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 2

• ~10 лет в R&D и автоматизации•Проект Jenkins, Core team

– Развитие ядра, поддержка плагинов– Организатор митапов

• Jenkins Developer в CloudBees– CloudBees – контрибьютор Jenkins– Основной продукт - CloudBees Jenkins Platform– Поддержка пользователей и консалтинг

•Использовал Pipeline до того, как это стало мейнстримом

О себе

@oleg_nenashevoleg-nenashev

Page 3: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

О чём доклад?Configuration as Code. Зачем?Обзор Jenkins Pipeline• Основные возможности• Плюсы и минусы• Что дальше?

Page 4: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 4

• Презентация отражает личное мнение докладчика

• Мнение докладчика может не совпадать с позицией компании CloudBees или сообщества Jenkins

Disclaimer

Page 5: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 5

Типовая задача в Jenkins для CI

Чекаут данныхФайлы проектаСкрипты сборки

Установка окружения

Сборка

Подготовка отчетов

Тестирование

Публикация артефактов

Нотификации

Бинарные файлыОтчёты по тестам…

Вручную

ТаймерыСобытия

SCM

SCM

Page 6: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 6

Было. Непрерывная Интеграция

РелизРелиз-

кандидатОсновная ветка

Изменение 1

Изменение 2

Изменение 3

QAмало QA

мало QA

мало QA

Page 7: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 7

Page 8: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 8

Они начинают раньше «работать»Финансовый эффект достигается раньше

Зачем доставлять изменения раньше?

Page 9: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 9

Как не надо делатьРелизОсновная ветка

Изменение 1

Изменение 2

Изменение 3

мало QA

мало QA

мало QA

“Тяп-ляп и в продакшн”

Исправляем…Исправляем…

Page 10: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 10

Ø Continuous DeliveryØ DevOpsØ Yet Another Buzzword

Что стало?

Page 11: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 11

Влияние на инфраструктуру

Инфраструктура теперь…:• критична для проектов• меняется параллельно с проектом• должна тестироваться

Для Jenkins:• Конфигурации Jenkins должны как-то управляться и тестироваться

• Jenkins не должен падать• Задачи должны быть быстрее и умнее

Page 12: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 12

“Классические” подходы

Failover• Naginator-плагин

Воспроизводимость• Чистое окружение• Одноразовые

виртуальные машины

•Параллелизация– Matrix Project– Parameterized Trigger

•Цепочки задач:– MultiJob plugin– Build Pipeline Plugin

•Шаблонизация:– Template project– Inheritance plugin

Page 13: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 13

“Классические” подходы

Спагетти-автоматизация

• Зависимости между задачами

• Трекинг компонентов

• Сложные конфигурации

• Дупликация

• Сложность поддержки

• Ошибки

Page 14: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 14

Что делать?

Page 15: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 15

Хранение [X] вместе с проектомОтслеживание измененийТестирование [X] вместе с проектом

[X] as code – Зачем оно нужно?

[X] – Configuration, Documentation,

Pipeline… Everything!

Page 16: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 16

Configuration as Code в Jenkins

Конфигурации задач в Jenkins

Настройки самого Jenkins

Page 17: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 17

Jenkins as Code - Внутри Jenkins [1/2]

Скрипты + Jenkins CLI и REST APIНет полностью завершённых решенийЕсть частные решения:• SCM Sync Configuration Plugin• DSL от Kohsuke▸https://github.com/jenkinsci/system-config-dsl-plugin

Page 18: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 18

Jenkins as Code - Вне проекта [2/2]

• Библиотеки-обёртки над API▸python-jenkins, jenkins-client

• Системы управления конфигурациями▸Есть проекты для всех популярных систем▸Ansible, Chef, Puppet, Docker, …▸В основном поддерживаются вне проекта Jenkins

Page 19: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 19

Configuration as Code для задач

Сегодня

Page 20: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 20

Описание задач в Jenkins … as Code

Job DSL

Pipeline (бывш. Workflow)

Jenkins Job Builder

Groovy

Groovy

YAML

Ещё несколько плагинов…

Page 21: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 21

Groovy DSL для описания задачТип задачи в Jenkins (Pipeline Job)Open-source экосистема для X-as-code

Что такое Jenkins Pipeline?

Page 22: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 22

Разработка начата ~3 года назад•Jesse Glick и KK

Релиз 1.0 – ноябрь 2014После – стабилизация и развитие

Предыстория

Page 23: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 23

Оба плагина полезныРазная архитектураРазные области примененияДа, некоторая конкуренция есть

FAQ. Pipeline vs. JobDSL

Page 24: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 24

Pipeline не привязан к конкретной ноде или рабочей директории

Параллелизация• Команда parallel() – не нужны связки задач

Множественные node() в одной задаче• => + parallel() – запуск тестов на разных машинах тестов на машинах

Специфика Pipeline

Page 25: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 25

Pipeline. Запуск скрипта из SCM

• Синтаксис на базе Groovy• Шаги для типовых операций• Описания задач можно хранить в SCM

• Jenkinsfile – описание задачи в корне репозитория

• Шаг git() заменяется на “checkout scm”• http://bit.ly/pipeline-tutorial

Page 26: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 26

Pipeline. Шаги

• Интеграции с плагинами• Системные шаги• Дополнительные библиотеки

Page 27: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 27

• Пользователь настраивает шаг сборки в UI• Jenkins генерирует код для Pipeline

Генератор шаблонов в UI

Page 28: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 28

Отображение последовательного PipelineCloudBees перевела проект в OSS

Фичи. Pipeline Stage View

• Шаг stage()• Логи для

отдельных стадий задачи

• Интерактивные шаги интегрированы в UI

Page 29: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 29

Фичи Pipeline

Множественные вызовы node()• Собрали на одной, протестировали на другой

parallel() – параллелизация задачstage() – стадии сборки и самосинхронизацияМножественные scm() в одной задачеИнтерактивные шаги

Page 30: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 30

Пример. Параллельные тесты…stage ‘test'parallel 'unit' : {node {unstash 'source'sh "./gradlew :test"stash includes: 'build/jacoco/*.exec', name: 'unitCodeCoverage'step([$class:'JUnitResultArchiver',

testResults:'**/build/test-results/*.xml'])}

}, 'integration': {node {unstash 'source'sh "./gradlew -PhappyPath :integration-test:test"step([$class:'JUnitResultArchiver',

testResults:'**/build/test-results/*.xml'])}

}

Page 31: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 31

Пример. Интерактивные шаги// Сборка проекта из репозитория// Инициализация тестового прогона в TestRail для QA// Автотесты, репортинг, деплой на staging-сервер

// Отправить уведомления ручным тестировщикамecho ’Automatic tests passed’ hipchatSend('@QATeam The build ' + buildVersion + ' has been staged: ' + stagingURL

+ '. Please Test it and report back to ' + build.url+ '. TestRail run is here: ' + testRailRunURL)

// Подождать, пока QA подтвердят релизinput message: 'Have manual spot-checks passed? Ready to release?'

// Релиз и нотификации

mail to: "[email protected]", subject: "Dream Product - build is released", body: "Hi there, The new build of the product has been released. Link:» + artifactoryLink

~~~~~~Много кода~~~~~~

~~~~~~Много кода~~~~~~

Page 32: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 32

Устойчивость к рестарту мастера• Pipeline хранит контекст и продолжает задачу после

рестарта

Системные вызовы на нодах через Durable TaskPlugin• Устойчивость к разрывам сети• Результаты кэшируются на слейве и пересылаются

после восстановления сети

Failover в случае инфраструктурных проблем

Pipeline. Надежность инфраструктуры

Page 33: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 33

Pipeline. Надежность инфраструктуры

Почти любая ошибка может быть перехвачена и отработана

Переход на другую ноду

Node #1 Node #2. . .

. . .

for (def board : boards) {echo "trying board " + board;try {node(board) {checkout scmsh ‘./bin/run.sh’ // Call passed => DONEbreak;

}} catch (Exception ex) {if (ex.message.contains

("exit code 255")) {// Fatal errorfail("Test run failed")

} } }

Пример кода

Page 34: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 34

Команда load() –загрузка Pipeline из файла

Было - CPS Global library• Входит в состав ядра Pipeline plugin• Создает Git-репозиторий в Jenkins• Глобальные функции, классы, переменные, …

Было - Pipeline Remote Loader• https://github.com/jenkinsci/workflow-remote-loader-plugin• Загрузка кода Pipeline из Git/GitHub• Логика плагина написана на Pipeline

Стало – Library Manager

Фичи. Шаринг кода между задачами

Page 35: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 35

Было - Pipeline Remote Loaderstage 'Load files from GitHub'def environment, helloworldfileLoader.withGit

('https://github.com/jenkinsci/workflow-remote-loader-plugin.git', 'master', null, '')

{ helloworld = fileLoader.load('examples/fileLoader/helloworld'); environment = fileLoader.load('examples/fileLoader/environment');

}

stage 'Run methods from the loaded content'helloworld.printHello() environment.dumpEnvVars()

Page 36: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 36

Стало – Pipeline LibrariesØ Определение библиотек внутри ИЛИ вне задачи

Ø Импорт библиотек из SCM

Ø Управление зависимостями и версиями

Ø Поддержка Groovy-плюшек (@Grab)

@Library(’org.librecores.ci.fusesoc') import org.librecores.ci.fusesoc.FuseSoCBuild

FuseSoCBuild.run([ sim: ‘verilator’corePath: ‘myprj.core’

]);

Page 37: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 37

Pipeline. Воспроизводимость сборок

Staging-репозитории• Плагины/CLI для Nexus, Artifactory,

TFS, …

«Чистые» окружения• Нативная поддержка Cloud’ов• Поддержка Cloud API Jenkins▸AWS, EC2, Azure, Mesos, vSphere, Docker, …

• Docker Pipeline Plugin

Page 38: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 38

Docker Pipeline Plugin. ПримерЗапуск задачи внутри контейнера:

Сборка и публикация образов:

Page 39: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 39

Пример. CD Jenkins-бота#!groovydef imageName = 'jenkinsciinfra/ircbot’node('docker') {

checkout scm// Немного магии для получения тэга Docker-образаsh 'git rev-parse HEAD > GIT_COMMIT'shortCommit = readFile('GIT_COMMIT').take(6)def imageTag = "build${shortCommit}"

stage 'Build ircbot'withMavenEnv

(["BUILD_NUMBER=${env.BUILD_NUMBER}:${shortCommit}"]) {sh 'make bot' // Make вызывает Maven

}

stage 'Build container'def whale = docker.build("${imageName}:${imageTag}”)

stage 'Deploy container'whale.push()

}

https://github.com/jenkins-infra/ircbot

Page 40: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 40

Multibranch Pipeline – тип задачи• В конфигурации – ссылка на репозиторий ▸Git/GitHub, BitBucket, …

• Описание проекта - Jenkinsfile• Для всех веток – ОТДЕЛЬНЫЕ задачи в Jenkins▸Сборки при коммитах▸Независимые отчеты и Build History

• [СКОРО] – Сборка pull-request’ов(+) Multi-branch работает на уровне организаций в GitHub и BitBucket

Фичи Pipeline. Multibranch

Page 41: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 41

Multibranch Pipeline. Пример

Page 42: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 42

Multibranch Pipeline. Пример конфигурации

Page 43: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 43

Pipeline: Ещё примеры

https://github.com/jenkinsci/pipeline-examples

Page 44: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 44

Ø Обработка ошибокØ Не все плагины интегрированыØ Средства разработкиØ Баги

ИМХО: Ограничения Pipeline

Page 45: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 45

«Красивая» интеграция - не у всех плагинов

Список поддерживаемых плагинов: • http://bit.ly/pipeline-compatibility

Последний довод:

Совместимость

Page 46: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 46

Средства разработки для Pipeline

Есть: • Минимальная IDE: Авто-дополнение• Минимальный статический анализа• Отображение документации для шагов

Отсутствуют:• Отладчик• Real-time аппрув вызовов в Script Security• Полноценный менеджер библиотек (DONE)

Page 47: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 47

Основные приоритетыТекущие проекты

Что дальше?

Page 48: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 48

Приоритеты Jenkins Pipeline

UX• Упрощение UX• Интерфейс - BlueOcean• Pipeline Model Definition

Архитектура• Производительность• Удаленный репортинг логов (вместе с ядром)

Page 49: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 49

Интеграции для Jenkins Pipeline

Неполный список:• https://github.com/jenkinsci/pipeline-plugin/blob/master/COMPATIBILITY.md

Было –силами сотрудников CloudBeesСейчас – много контрибьюторов

Page 50: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 50

Синтаксический сахар - @Symbol

$class больше не нужен … почти

Упрощен синтаксис Pipeline и JobDSL

Page 51: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 51

Синтаксический сахар - @Symbol

Было:

Стало:

Page 52: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 52

Ø Упрощение синтаксисаØ Всё еще внутри Groovy DSLØ Структурирование

Ø EnvironmentØ Build StageØ PublisherØ …

Pipeline Model Definition

Page 53: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 53

Ø Новый UI для Jenkins Ø Фокус - Continuous DeliveryØ Реализация UI на ES6/ReactØ Глубокая интеграция с Pipeline

Blue Ocean

https://jenkins.io/projects/blueocean/

Page 54: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 54

Blue Ocean

Page 55: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 55

Page 56: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 56

Page 57: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 57

Blue Ocean. Текущий статус

Бета-версия доступна для загрузки• Основной апдейт-центр

Регулярные апдейты в блог• jenkins.io

Итого:• Нужно пробовать• Можно интегрироваться• Для продакшна – ждать релиза

Page 58: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 58

Интеграции для Jenkins Pipeline. Пример

Пример – Google Summer of Code 2016Alex Somai – один из студентов• https://github.com/jenkinsci/external-workspace-manager-plugin/

Что сделано?• Run Selector Plugin с поддержкой Pipeline• Поддержка Pipeline в Workspace Cleanup Plugin• NEW: External Workspace Manager для Pipeline

Page 59: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 59

Преимущества Pipeline• Задачи можно писать на высокоуровневом ЯП• Снижает затраты на поддержку автоматизации• Новая архитектура – больше возможностей• Новый UI

Недостатки Pipeline• Недостаток интеграций с плагинами• Недостаток средств разработки• Не все проблемы решены

Заключение

Page 60: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 60

ИМХО докладчика

Полезен ли Pipeline?• ДА

Является ли Pipeline “серебряной пулей”?• НЕТ

Стоит ли его пробовать?• ДА

Готов ли Pipeline для продакшна?• В целом да, зависит от задач

Прогнозы?• Оптимистичные

Page 61: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

© 2016 CloudBees, Inc. All Rights Reserved. 61

Jenkins: • Вебсайт: http://jenkins.io• Jenkins 2.0: https://jenkins-ci.org/2.0/• Jenkins и CD: https://jenkins.io/solutions/pipeline/

Pipeline-as-Code:• Документация: https://jenkins.io/doc/pipeline/• Примеры: https://github.com/jenkinsci/pipeline-examples

CloudBees: • Вебсайт: https://www.cloudbees.com/• CloudBees Jenkins Platform:

https://www.cloudbees.com/products/cloudbees-jenkins-platform

Ссылки

Page 62: Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы

Software at the speed of ideas

THANK YOU!www.cloudbees.com

Вопросы?Offline: http://gitter.im/jenkinsci-ru