Upload
oleg-nenashev
View
216
Download
6
Embed Size (px)
Citation preview
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_nenashevoleg-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
Отображение последовательного PipelineCloudBees перевела проект в 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: "[email protected]", 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 TaskPlugin• Устойчивость к разрывам сети• Результаты кэшируются на слейве и пересылаются
после восстановления сети
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 scmsh ‘./bin/run.sh’ // Call passed => DONEbreak;
}} catch (Exception ex) {if (ex.message.contains
("exit code 255")) {// Fatal errorfail("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 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()
© 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-бота#!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
© 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 2016Alex 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