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

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.
    О чём доклад? Configurationas 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 thespeed of ideas THANK YOU! www.cloudbees.com Вопросы? Offline: http://gitter.im/jenkinsci-ru