More Related Content Similar to Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы (20) 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
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
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
“Классические” подходы
Спагетти-автоматизация
• Зависимости
между
задачами
• Трекинг
компонентов
• Сложные
конфигурации
• Дупликация
• Сложность
поддержки
• Ошибки
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
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/
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