SlideShare a Scribd company logo
1 of 62
Download to read offline
Pipeline для инженеров.
Обзор экосистемы и
никакого маркетинга
Олег Ненашев,
CloudBees, Inc.
Moscow Jenkins Meetup #1,
2 ноября 2016
Oleg Nenashev (@oleg_nenashev)
CloudBees, Inc.
© 2016 CloudBees, Inc. All Rights Reserved. 2
• ~10 лет в R&D и автоматизации
• Проект Jenkins, Core team
– Развитие ядра, поддержка плагинов
– Организатор митапов
• Jenkins Developer в CloudBees
– CloudBees – контрибьютор Jenkins
– Основной продукт - CloudBees Jenkins Platform
– Поддержка пользователей и консалтинг
• Использовал Pipeline до того, как это стало
мейнстримом
О себе
@oleg_nenashev
oleg-nenashev
О чём доклад?
Configuration as Code. Зачем?
Обзор Jenkins Pipeline
• Основные возможности
• Плюсы и минусы
• Что дальше?
© 2016 CloudBees, Inc. All Rights Reserved. 4
• Презентация отражает личное мнение
докладчика
• Мнение докладчика может не совпадать с
позицией компании CloudBees или
сообщества Jenkins
Disclaimer
© 2016 CloudBees, Inc. All Rights Reserved. 5
Типовая задача в Jenkins для CI
Чекаут данных
Файлы проекта
Скрипты сборки
Установка окружения
Сборка
Подготовка отчетов
Тестирование
Публикация
артефактов
Нотификации
Бинарные файлы
Отчёты по тестам
…
Вручную
Таймеры
События
SCM
SCM
…
© 2016 CloudBees, Inc. All Rights Reserved. 6
Было. Непрерывная Интеграция
Релиз
Релиз-
кандидатОсновная ветка
Изменение 1
Изменение 2
Изменение 3
QA
мало QA
мало QA
мало QA
© 2016 CloudBees, Inc. All Rights Reserved. 7
© 2016 CloudBees, Inc. All Rights Reserved. 8
Они начинают раньше «работать»
Финансовый эффект достигается раньше
Зачем доставлять изменения раньше?
© 2016 CloudBees, Inc. All Rights Reserved. 9
Как не надо делать
Релиз
Основная ветка
Изменение 1
Изменение 2
Изменение 3
мало QA
мало QA
мало QA
“Тяп-ляп и в
продакшн”
Исправляем…Исправляем…
© 2016 CloudBees, Inc. All Rights Reserved. 10
Ø Continuous Delivery
Ø DevOps
Ø Yet Another Buzzword
Что стало?
© 2016 CloudBees, Inc. All Rights Reserved. 11
Влияние на инфраструктуру
Инфраструктура теперь…:
• критична для проектов
• меняется параллельно с проектом
• должна тестироваться
Для Jenkins:
• Конфигурации Jenkins должны как-то
управляться и тестироваться
• Jenkins не должен падать
• Задачи должны быть быстрее и умнее
© 2016 CloudBees, Inc. All Rights Reserved. 12
“Классические” подходы
Failover
• Naginator-плагин
Воспроизводимость
• Чистое окружение
• Одноразовые
виртуальные машины
• Параллелизация
– Matrix Project
– Parameterized Trigger
• Цепочки задач:
– MultiJob plugin
– Build Pipeline Plugin
• Шаблонизация:
– Template project
– Inheritance plugin
© 2016 CloudBees, Inc. All Rights Reserved. 13
“Классические” подходы
Спагетти-автоматизация
• Зависимости
между
задачами
• Трекинг
компонентов
• Сложные
конфигурации
• Дупликация
• Сложность
поддержки
• Ошибки
© 2016 CloudBees, Inc. All Rights Reserved. 14
Что делать?
© 2016 CloudBees, Inc. All Rights Reserved. 15
Хранение [X] вместе с проектом
Отслеживание изменений
Тестирование [X] вместе с проектом
[X] as code – Зачем оно нужно?
[X] – Configuration,
Documentation,
Pipeline…
Everything!
© 2016 CloudBees, Inc. All Rights Reserved. 16
Configuration as Code в Jenkins
Конфигурации
задач в Jenkins
Настройки
самого
Jenkins
© 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
© 2016 CloudBees, Inc. All Rights Reserved. 18
Jenkins as Code - Вне проекта [2/2]
• Библиотеки-обёртки над API
▸python-jenkins, jenkins-client
• Системы управления конфигурациями
▸Есть проекты для всех популярных систем
▸Ansible, Chef, Puppet, Docker, …
▸В основном поддерживаются вне проекта Jenkins
© 2016 CloudBees, Inc. All Rights Reserved. 19
Configuration as Code для задач
Сегодня
© 2016 CloudBees, Inc. All Rights Reserved. 20
Описание задач в Jenkins … as Code
Job DSL
Pipeline (бывш. Workflow)
Jenkins Job Builder
Groovy
Groovy
YAML
Ещё несколько плагинов…
© 2016 CloudBees, Inc. All Rights Reserved. 21
Groovy DSL для описания задач
Тип задачи в Jenkins (Pipeline Job)
Open-source экосистема для X-as-code
Что такое Jenkins Pipeline?
© 2016 CloudBees, Inc. All Rights Reserved. 22
Разработка начата ~3 года назад
•Jesse Glick и KK
Релиз 1.0 – ноябрь 2014
После – стабилизация и развитие
Предыстория
© 2016 CloudBees, Inc. All Rights Reserved. 23
Оба плагина полезны
Разная архитектура
Разные области применения
Да, некоторая конкуренция есть
FAQ. Pipeline vs. JobDSL
© 2016 CloudBees, Inc. All Rights Reserved. 24
Pipeline не привязан к конкретной ноде или
рабочей директории
Параллелизация
•Команда parallel() – не нужны связки задач
Множественные node() в одной задаче
•=> + parallel() – запуск тестов на разных
машинах тестов на машинах
Специфика Pipeline
© 2016 CloudBees, Inc. All Rights Reserved. 25
Pipeline. Запуск скрипта из SCM
• Синтаксис на базе Groovy
• Шаги для типовых операций
• Описания задач можно хранить в SCM
• Jenkinsfile – описание задачи в корне
репозитория
• Шаг git() заменяется на “checkout scm”
• http://bit.ly/pipeline-tutorial
© 2016 CloudBees, Inc. All Rights Reserved. 26
Pipeline. Шаги
• Интеграции с плагинами
• Системные шаги
• Дополнительные библиотеки
© 2016 CloudBees, Inc. All Rights Reserved. 27
•Пользователь настраивает шаг сборки в UI
•Jenkins генерирует код для Pipeline
Генератор шаблонов в UI
© 2016 CloudBees, Inc. All Rights Reserved. 28
Отображение последовательного Pipeline
CloudBees перевела проект в OSS
Фичи. Pipeline Stage View
• Шаг stage()
• Логи для
отдельных стадий
задачи
• Интерактивные
шаги
интегрированы в UI
© 2016 CloudBees, Inc. All Rights Reserved. 29
Фичи Pipeline
Множественные вызовы node()
• Собрали на одной, протестировали на другой
parallel() – параллелизация задач
stage() – стадии сборки и самосинхронизация
Множественные scm() в одной задаче
Интерактивные шаги
© 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'])
}
}
© 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: "dream_team@cloudbees.com",
subject: "Dream Product - build is released",
body: "Hi there, The new build of the product has been released. Link:» + artifactoryLink
~~~~~~Много кода~~~~~~
~~~~~~Много кода~~~~~~
© 2016 CloudBees, Inc. All Rights Reserved. 32
Устойчивость к рестарту мастера
• Pipeline хранит контекст и продолжает задачу после
рестарта
Системные вызовы на нодах через Durable Task
Plugin
• Устойчивость к разрывам сети
• Результаты кэшируются на слейве и пересылаются
после восстановления сети
Failover в случае инфраструктурных проблем
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 scm
sh ‘./bin/run.sh’
// Call passed => DONE
break;
}
} catch (Exception ex) {
if (ex.message.contains
("exit code 255")) {
// Fatal error
fail("Test run failed")
} } }
Пример кода
© 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
Фичи. Шаринг кода между задачами
© 2016 CloudBees, Inc. All Rights Reserved. 35
Было - Pipeline Remote Loader
stage 'Load files from GitHub'
def environment, helloworld
fileLoader.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()
© 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’
]);
© 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
© 2016 CloudBees, Inc. All Rights Reserved. 38
Docker Pipeline Plugin. Пример
Запуск задачи внутри контейнера:
Сборка и публикация образов:
© 2016 CloudBees, Inc. All Rights Reserved. 39
Пример. CD Jenkins-бота
#!groovy
def 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
© 2016 CloudBees, Inc. All Rights Reserved. 40
Multibranch Pipeline – тип задачи
•В конфигурации – ссылка на репозиторий
▸Git/GitHub, BitBucket, …
•Описание проекта - Jenkinsfile
•Для всех веток – ОТДЕЛЬНЫЕ задачи в Jenkins
▸Сборки при коммитах
▸Независимые отчеты и Build History
•[СКОРО] – Сборка pull-request’ов
(+) Multi-branch работает на уровне организаций в
GitHub и BitBucket
Фичи Pipeline. Multibranch
© 2016 CloudBees, Inc. All Rights Reserved. 41
Multibranch Pipeline. Пример
© 2016 CloudBees, Inc. All Rights Reserved. 42
Multibranch Pipeline. Пример конфигурации
© 2016 CloudBees, Inc. All Rights Reserved. 43
Pipeline: Ещё примеры
https://github.com/jenkinsci/
pipeline-examples
© 2016 CloudBees, Inc. All Rights Reserved. 44
Ø Обработка ошибок
Ø Не все плагины интегрированы
Ø Средства разработки
Ø Баги
ИМХО: Ограничения Pipeline
© 2016 CloudBees, Inc. All Rights Reserved. 45
«Красивая» интеграция - не у всех плагинов
Список поддерживаемых плагинов:
• http://bit.ly/pipeline-compatibility
Последний довод:
Совместимость
© 2016 CloudBees, Inc. All Rights Reserved. 46
Средства разработки для Pipeline
Есть:
•Минимальная IDE: Авто-дополнение
•Минимальный статический анализа
•Отображение документации для шагов
Отсутствуют:
•Отладчик
•Real-time аппрув вызовов в Script Security
•Полноценный менеджер библиотек (DONE)
© 2016 CloudBees, Inc. All Rights Reserved. 47
Основные приоритеты
Текущие проекты
Что дальше?
© 2016 CloudBees, Inc. All Rights Reserved. 48
Приоритеты Jenkins Pipeline
UX
•Упрощение UX
•Интерфейс - BlueOcean
•Pipeline Model Definition
Архитектура
•Производительность
•Удаленный репортинг логов (вместе с ядром)
© 2016 CloudBees, Inc. All Rights Reserved. 49
Интеграции для Jenkins Pipeline
Неполный список:
•https://github.com/jenkinsci/pipeline-
plugin/blob/master/COMPATIBILITY.md
Было –силами сотрудников CloudBees
Сейчас – много контрибьюторов
© 2016 CloudBees, Inc. All Rights Reserved. 50
Синтаксический сахар - @Symbol
$class больше не
нужен … почти
Упрощен
синтаксис
Pipeline и JobDSL
© 2016 CloudBees, Inc. All Rights Reserved. 51
Синтаксический сахар - @Symbol
Было:
Стало:
© 2016 CloudBees, Inc. All Rights Reserved. 52
Ø Упрощение синтаксиса
Ø Всё еще внутри Groovy DSL
Ø Структурирование
Ø Environment
Ø Build Stage
Ø Publisher
Ø …
Pipeline Model Definition
© 2016 CloudBees, Inc. All Rights Reserved. 53
Ø Новый UI для Jenkins
Ø Фокус - Continuous Delivery
Ø Реализация UI на ES6/React
Ø Глубокая интеграция с Pipeline
Blue Ocean
https://jenkins.io/projects/blueocean/
© 2016 CloudBees, Inc. All Rights Reserved. 54
Blue Ocean
© 2016 CloudBees, Inc. All Rights Reserved. 55
© 2016 CloudBees, Inc. All Rights Reserved. 56
© 2016 CloudBees, Inc. All Rights Reserved. 57
Blue Ocean. Текущий статус
Бета-версия доступна для загрузки
•Основной апдейт-центр
Регулярные апдейты в блог
•jenkins.io
Итого:
•Нужно пробовать
•Можно интегрироваться
•Для продакшна – ждать релиза
© 2016 CloudBees, Inc. All Rights Reserved. 58
Интеграции для Jenkins Pipeline. Пример
Пример – Google Summer of Code 2016
Alex Somai – один из студентов
• https://github.com/jenkinsci/external-workspace-
manager-plugin/
Что сделано?
• Run Selector Plugin с поддержкой Pipeline
• Поддержка Pipeline в Workspace Cleanup Plugin
• NEW: External Workspace Manager для Pipeline
© 2016 CloudBees, Inc. All Rights Reserved. 59
Преимущества Pipeline
• Задачи можно писать на высокоуровневом ЯП
• Снижает затраты на поддержку автоматизации
• Новая архитектура – больше возможностей
• Новый UI
Недостатки Pipeline
• Недостаток интеграций с плагинами
• Недостаток средств разработки
• Не все проблемы решены
Заключение
© 2016 CloudBees, Inc. All Rights Reserved. 60
ИМХО докладчика
Полезен ли Pipeline?
• ДА
Является ли Pipeline “серебряной пулей”?
•НЕТ
Стоит ли его пробовать?
• ДА
Готов ли 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
Ссылки
Software at the speed of ideas
THANK YOU!
www.cloudbees.com
Вопросы?
Offline: http://gitter.im/jenkinsci-ru

More Related Content

What's hot

Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsValentin Fedoskin
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo KazymyrovFwdays
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаYandex
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магияAleksey Solntsev
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Кирилл Толкачёв
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspbGonchik Tsymzhitov
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)Ontico
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCOMAQA.BY
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Fwdays
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting
 SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting
SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем RemotingOleg Nenashev
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demandSQALab
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxDotNetConf
 

What's hot (20)

Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
It meetup cd
It meetup cdIt meetup cd
It meetup cd
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 
Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting
 SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting
SPb Jenkins Meetup #6. Тёмная сторона Jenkins. Стабилизируем Remoting
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 

Viewers also liked

The Butler is still young – applying modern Jenkins features to the Embedded ...
The Butler is still young – applying modern Jenkins features to the Embedded ...The Butler is still young – applying modern Jenkins features to the Embedded ...
The Butler is still young – applying modern Jenkins features to the Embedded ...Oleg Nenashev
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиOleg Nenashev
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...WrikeTechClub
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»WrikeTechClub
 
Александр Шуров, Олег Николенко «Как устроено автоматическое frontend-тестир...
Александр Шуров, Олег Николенко  «Как устроено автоматическое frontend-тестир...Александр Шуров, Олег Николенко  «Как устроено автоматическое frontend-тестир...
Александр Шуров, Олег Николенко «Как устроено автоматическое frontend-тестир...WrikeTechClub
 

Viewers also liked (7)

The Butler is still young – applying modern Jenkins features to the Embedded ...
The Butler is still young – applying modern Jenkins features to the Embedded ...The Butler is still young – applying modern Jenkins features to the Embedded ...
The Butler is still young – applying modern Jenkins features to the Embedded ...
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Александр Шуров, Олег Николенко «Как устроено автоматическое frontend-тестир...
Александр Шуров, Олег Николенко  «Как устроено автоматическое frontend-тестир...Александр Шуров, Олег Николенко  «Как устроено автоматическое frontend-тестир...
Александр Шуров, Олег Николенко «Как устроено автоматическое frontend-тестир...
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Tipos de aprendizaje
Tipos de aprendizajeTipos de aprendizaje
Tipos de aprendizaje
 

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

IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergrationInterSystems
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéInterSystems CEE
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в ЯндексеAndrey Kazarinov
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projectsAsya Dudnik
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesDenis Izmaylov
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayAndrey Rebrov
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 

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

IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projects
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 

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

  • 1. Pipeline для инженеров. Обзор экосистемы и никакого маркетинга Олег Ненашев, CloudBees, Inc. Moscow Jenkins Meetup #1, 2 ноября 2016 Oleg Nenashev (@oleg_nenashev) CloudBees, Inc.
  • 2. © 2016 CloudBees, Inc. All Rights Reserved. 2 • ~10 лет в R&D и автоматизации • Проект Jenkins, Core team – Развитие ядра, поддержка плагинов – Организатор митапов • Jenkins Developer в CloudBees – CloudBees – контрибьютор Jenkins – Основной продукт - CloudBees Jenkins Platform – Поддержка пользователей и консалтинг • Использовал Pipeline до того, как это стало мейнстримом О себе @oleg_nenashev oleg-nenashev
  • 3. О чём доклад? Configuration as Code. Зачем? Обзор Jenkins Pipeline • Основные возможности • Плюсы и минусы • Что дальше?
  • 4. © 2016 CloudBees, Inc. All Rights Reserved. 4 • Презентация отражает личное мнение докладчика • Мнение докладчика может не совпадать с позицией компании CloudBees или сообщества Jenkins Disclaimer
  • 5. © 2016 CloudBees, Inc. All Rights Reserved. 5 Типовая задача в Jenkins для CI Чекаут данных Файлы проекта Скрипты сборки Установка окружения Сборка Подготовка отчетов Тестирование Публикация артефактов Нотификации Бинарные файлы Отчёты по тестам … Вручную Таймеры События SCM SCM …
  • 6. © 2016 CloudBees, Inc. All Rights Reserved. 6 Было. Непрерывная Интеграция Релиз Релиз- кандидатОсновная ветка Изменение 1 Изменение 2 Изменение 3 QA мало QA мало QA мало QA
  • 7. © 2016 CloudBees, Inc. All Rights Reserved. 7
  • 8. © 2016 CloudBees, Inc. All Rights Reserved. 8 Они начинают раньше «работать» Финансовый эффект достигается раньше Зачем доставлять изменения раньше?
  • 9. © 2016 CloudBees, Inc. All Rights Reserved. 9 Как не надо делать Релиз Основная ветка Изменение 1 Изменение 2 Изменение 3 мало QA мало QA мало QA “Тяп-ляп и в продакшн” Исправляем…Исправляем…
  • 10. © 2016 CloudBees, Inc. All Rights Reserved. 10 Ø Continuous Delivery Ø DevOps Ø Yet Another Buzzword Что стало?
  • 11. © 2016 CloudBees, Inc. All Rights Reserved. 11 Влияние на инфраструктуру Инфраструктура теперь…: • критична для проектов • меняется параллельно с проектом • должна тестироваться Для Jenkins: • Конфигурации Jenkins должны как-то управляться и тестироваться • Jenkins не должен падать • Задачи должны быть быстрее и умнее
  • 12. © 2016 CloudBees, Inc. All Rights Reserved. 12 “Классические” подходы Failover • Naginator-плагин Воспроизводимость • Чистое окружение • Одноразовые виртуальные машины • Параллелизация – Matrix Project – Parameterized Trigger • Цепочки задач: – MultiJob plugin – Build Pipeline Plugin • Шаблонизация: – Template project – Inheritance plugin
  • 13. © 2016 CloudBees, Inc. All Rights Reserved. 13 “Классические” подходы Спагетти-автоматизация • Зависимости между задачами • Трекинг компонентов • Сложные конфигурации • Дупликация • Сложность поддержки • Ошибки
  • 14. © 2016 CloudBees, Inc. All Rights Reserved. 14 Что делать?
  • 15. © 2016 CloudBees, Inc. All Rights Reserved. 15 Хранение [X] вместе с проектом Отслеживание изменений Тестирование [X] вместе с проектом [X] as code – Зачем оно нужно? [X] – Configuration, Documentation, Pipeline… Everything!
  • 16. © 2016 CloudBees, Inc. All Rights Reserved. 16 Configuration as Code в Jenkins Конфигурации задач в Jenkins Настройки самого Jenkins
  • 17. © 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
  • 18. © 2016 CloudBees, Inc. All Rights Reserved. 18 Jenkins as Code - Вне проекта [2/2] • Библиотеки-обёртки над API ▸python-jenkins, jenkins-client • Системы управления конфигурациями ▸Есть проекты для всех популярных систем ▸Ansible, Chef, Puppet, Docker, … ▸В основном поддерживаются вне проекта Jenkins
  • 19. © 2016 CloudBees, Inc. All Rights Reserved. 19 Configuration as Code для задач Сегодня
  • 20. © 2016 CloudBees, Inc. All Rights Reserved. 20 Описание задач в Jenkins … as Code Job DSL Pipeline (бывш. Workflow) Jenkins Job Builder Groovy Groovy YAML Ещё несколько плагинов…
  • 21. © 2016 CloudBees, Inc. All Rights Reserved. 21 Groovy DSL для описания задач Тип задачи в Jenkins (Pipeline Job) Open-source экосистема для X-as-code Что такое Jenkins Pipeline?
  • 22. © 2016 CloudBees, Inc. All Rights Reserved. 22 Разработка начата ~3 года назад •Jesse Glick и KK Релиз 1.0 – ноябрь 2014 После – стабилизация и развитие Предыстория
  • 23. © 2016 CloudBees, Inc. All Rights Reserved. 23 Оба плагина полезны Разная архитектура Разные области применения Да, некоторая конкуренция есть FAQ. Pipeline vs. JobDSL
  • 24. © 2016 CloudBees, Inc. All Rights Reserved. 24 Pipeline не привязан к конкретной ноде или рабочей директории Параллелизация •Команда parallel() – не нужны связки задач Множественные node() в одной задаче •=> + parallel() – запуск тестов на разных машинах тестов на машинах Специфика Pipeline
  • 25. © 2016 CloudBees, Inc. All Rights Reserved. 25 Pipeline. Запуск скрипта из SCM • Синтаксис на базе Groovy • Шаги для типовых операций • Описания задач можно хранить в SCM • Jenkinsfile – описание задачи в корне репозитория • Шаг git() заменяется на “checkout scm” • http://bit.ly/pipeline-tutorial
  • 26. © 2016 CloudBees, Inc. All Rights Reserved. 26 Pipeline. Шаги • Интеграции с плагинами • Системные шаги • Дополнительные библиотеки
  • 27. © 2016 CloudBees, Inc. All Rights Reserved. 27 •Пользователь настраивает шаг сборки в UI •Jenkins генерирует код для Pipeline Генератор шаблонов в UI
  • 28. © 2016 CloudBees, Inc. All Rights Reserved. 28 Отображение последовательного Pipeline CloudBees перевела проект в OSS Фичи. Pipeline Stage View • Шаг stage() • Логи для отдельных стадий задачи • Интерактивные шаги интегрированы в UI
  • 29. © 2016 CloudBees, Inc. All Rights Reserved. 29 Фичи Pipeline Множественные вызовы node() • Собрали на одной, протестировали на другой parallel() – параллелизация задач stage() – стадии сборки и самосинхронизация Множественные scm() в одной задаче Интерактивные шаги
  • 30. © 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']) } }
  • 31. © 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: "dream_team@cloudbees.com", subject: "Dream Product - build is released", body: "Hi there, The new build of the product has been released. Link:» + artifactoryLink ~~~~~~Много кода~~~~~~ ~~~~~~Много кода~~~~~~
  • 32. © 2016 CloudBees, Inc. All Rights Reserved. 32 Устойчивость к рестарту мастера • Pipeline хранит контекст и продолжает задачу после рестарта Системные вызовы на нодах через Durable Task Plugin • Устойчивость к разрывам сети • Результаты кэшируются на слейве и пересылаются после восстановления сети Failover в случае инфраструктурных проблем Pipeline. Надежность инфраструктуры
  • 33. © 2016 CloudBees, Inc. All Rights Reserved. 33 Pipeline. Надежность инфраструктуры Почти любая ошибка может быть перехвачена и отработана Переход на другую ноду Node #1 Node #2. . . . . . for (def board : boards) { echo "trying board " + board; try { node(board) { checkout scm sh ‘./bin/run.sh’ // Call passed => DONE break; } } catch (Exception ex) { if (ex.message.contains ("exit code 255")) { // Fatal error fail("Test run failed") } } } Пример кода
  • 34. © 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 Фичи. Шаринг кода между задачами
  • 35. © 2016 CloudBees, Inc. All Rights Reserved. 35 Было - Pipeline Remote Loader stage 'Load files from GitHub' def environment, helloworld fileLoader.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()
  • 36. © 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’ ]);
  • 37. © 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
  • 38. © 2016 CloudBees, Inc. All Rights Reserved. 38 Docker Pipeline Plugin. Пример Запуск задачи внутри контейнера: Сборка и публикация образов:
  • 39. © 2016 CloudBees, Inc. All Rights Reserved. 39 Пример. CD Jenkins-бота #!groovy def 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
  • 40. © 2016 CloudBees, Inc. All Rights Reserved. 40 Multibranch Pipeline – тип задачи •В конфигурации – ссылка на репозиторий ▸Git/GitHub, BitBucket, … •Описание проекта - Jenkinsfile •Для всех веток – ОТДЕЛЬНЫЕ задачи в Jenkins ▸Сборки при коммитах ▸Независимые отчеты и Build History •[СКОРО] – Сборка pull-request’ов (+) Multi-branch работает на уровне организаций в GitHub и BitBucket Фичи Pipeline. Multibranch
  • 41. © 2016 CloudBees, Inc. All Rights Reserved. 41 Multibranch Pipeline. Пример
  • 42. © 2016 CloudBees, Inc. All Rights Reserved. 42 Multibranch Pipeline. Пример конфигурации
  • 43. © 2016 CloudBees, Inc. All Rights Reserved. 43 Pipeline: Ещё примеры https://github.com/jenkinsci/ pipeline-examples
  • 44. © 2016 CloudBees, Inc. All Rights Reserved. 44 Ø Обработка ошибок Ø Не все плагины интегрированы Ø Средства разработки Ø Баги ИМХО: Ограничения Pipeline
  • 45. © 2016 CloudBees, Inc. All Rights Reserved. 45 «Красивая» интеграция - не у всех плагинов Список поддерживаемых плагинов: • http://bit.ly/pipeline-compatibility Последний довод: Совместимость
  • 46. © 2016 CloudBees, Inc. All Rights Reserved. 46 Средства разработки для Pipeline Есть: •Минимальная IDE: Авто-дополнение •Минимальный статический анализа •Отображение документации для шагов Отсутствуют: •Отладчик •Real-time аппрув вызовов в Script Security •Полноценный менеджер библиотек (DONE)
  • 47. © 2016 CloudBees, Inc. All Rights Reserved. 47 Основные приоритеты Текущие проекты Что дальше?
  • 48. © 2016 CloudBees, Inc. All Rights Reserved. 48 Приоритеты Jenkins Pipeline UX •Упрощение UX •Интерфейс - BlueOcean •Pipeline Model Definition Архитектура •Производительность •Удаленный репортинг логов (вместе с ядром)
  • 49. © 2016 CloudBees, Inc. All Rights Reserved. 49 Интеграции для Jenkins Pipeline Неполный список: •https://github.com/jenkinsci/pipeline- plugin/blob/master/COMPATIBILITY.md Было –силами сотрудников CloudBees Сейчас – много контрибьюторов
  • 50. © 2016 CloudBees, Inc. All Rights Reserved. 50 Синтаксический сахар - @Symbol $class больше не нужен … почти Упрощен синтаксис Pipeline и JobDSL
  • 51. © 2016 CloudBees, Inc. All Rights Reserved. 51 Синтаксический сахар - @Symbol Было: Стало:
  • 52. © 2016 CloudBees, Inc. All Rights Reserved. 52 Ø Упрощение синтаксиса Ø Всё еще внутри Groovy DSL Ø Структурирование Ø Environment Ø Build Stage Ø Publisher Ø … Pipeline Model Definition
  • 53. © 2016 CloudBees, Inc. All Rights Reserved. 53 Ø Новый UI для Jenkins Ø Фокус - Continuous Delivery Ø Реализация UI на ES6/React Ø Глубокая интеграция с Pipeline Blue Ocean https://jenkins.io/projects/blueocean/
  • 54. © 2016 CloudBees, Inc. All Rights Reserved. 54 Blue Ocean
  • 55. © 2016 CloudBees, Inc. All Rights Reserved. 55
  • 56. © 2016 CloudBees, Inc. All Rights Reserved. 56
  • 57. © 2016 CloudBees, Inc. All Rights Reserved. 57 Blue Ocean. Текущий статус Бета-версия доступна для загрузки •Основной апдейт-центр Регулярные апдейты в блог •jenkins.io Итого: •Нужно пробовать •Можно интегрироваться •Для продакшна – ждать релиза
  • 58. © 2016 CloudBees, Inc. All Rights Reserved. 58 Интеграции для Jenkins Pipeline. Пример Пример – Google Summer of Code 2016 Alex Somai – один из студентов • https://github.com/jenkinsci/external-workspace- manager-plugin/ Что сделано? • Run Selector Plugin с поддержкой Pipeline • Поддержка Pipeline в Workspace Cleanup Plugin • NEW: External Workspace Manager для Pipeline
  • 59. © 2016 CloudBees, Inc. All Rights Reserved. 59 Преимущества Pipeline • Задачи можно писать на высокоуровневом ЯП • Снижает затраты на поддержку автоматизации • Новая архитектура – больше возможностей • Новый UI Недостатки Pipeline • Недостаток интеграций с плагинами • Недостаток средств разработки • Не все проблемы решены Заключение
  • 60. © 2016 CloudBees, Inc. All Rights Reserved. 60 ИМХО докладчика Полезен ли Pipeline? • ДА Является ли Pipeline “серебряной пулей”? •НЕТ Стоит ли его пробовать? • ДА Готов ли Pipeline для продакшна? • В целом да, зависит от задач Прогнозы? • Оптимистичные
  • 61. © 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 Ссылки
  • 62. Software at the speed of ideas THANK YOU! www.cloudbees.com Вопросы? Offline: http://gitter.im/jenkinsci-ru