Upload
404fest
View
254
Download
0
Embed Size (px)
DESCRIPTION
Идея доклада — рассказать об использовании Jenkins как не типичного инструмента для построения распределенной сборки продукта, зарабатывающего миллионы долларов. Мы поделимся секретами его адаптации под сборку билдов сложных систем/продуктов с многими компонентами и ускорения в разы этой задачи. Наша проблема: линейная сборка продукта занимает 8 часов. А Jenkins «из коробки» не умеет собирать сложные иерархии. При этом писать код самостоятельно не хочется. В итоге мы придумали, как использовать существующий инструмент, пройдясь по нему напильником. Кому будет интересно: Эти знания могут помочь людям, которые хотят построить эффективный CI, но не хотят тратить много времени на исследования. Мы выложим наш код и материалы на GitHub. Это будет довольно практично. Лайфхаки: Используем Build Flow + Groovy скрипты чтобы оркестрировать сложную иерархию с параллельными ветвями и собирать результаты Правильное использование префиксов в названиях job-ов помогают автоматизировать группировку по бранчам Переиспользуем окружения сборки много раз, не удаляя их Предыдущий пункт в итоге оставляет за собой кучу мусора, которую мы периодически очищаем при помощи системных Groovy скриптов по job префиксу Группировка большого количества job-ов в проекты и бранчи с использованием Nested View Дамп и разворачивание job-ов из системы контроля версий по шаблону Ну и взгляд в будущее: автоматический анализ билд проблем. http://2014.404fest.ru/reports/jenkins/
Citation preview
Распараллеливание сборкиParallels Desktop
Константин Назаров [racktear@]
обо мне
• Работаю в
• В прошлом — системный программист
• Улучшаю процессы в компании
Константин Назаров
любимый продукт — Parallels Desktop
что нам удалось сделать
• Быстрее сборка: с 8 часов до 1.3 (в 6 раз)
• Инцидентов меньше в десятки раз
• В 4 раза больше сборок
зачем я здесь?
• поделиться нашим опытом
• дать готовые, действенные советы (и код!)
• познакомиться с единомышленниками
• научиться новому
В чем сложности?
• В Parallels Desktop — 19 компонентов
• Одновременно 4-5 активных веток
• Сборка компонента от 20 до 30 минут
А еще
• Зависимости
• Упаковка и инсталлеры
• Отладочная информация
• Хранение результатов
• Тестирование
немного истории
я прошел все стадии• Отрицание
• Гнев
• Торг
• Депрессия
• Принятие
наши ошибки
Подход разработчика
• Попытка глубоко продумать архитектуру
• Нежелание делать “быстрые” решения
• Завышенные ожидания качества
централизация
• централизация ответственности
• сокрытие знаний
написание кода• То есть попытка сделать CI “с нуля”
• Десятки тысяч строк
Почему это не работает?
причины:
• Это дорого
• Ответственность должна быть общей
• Это не ваша компетенция (как компании)
почему Jenkins?
очень просто:
• Около 1000 плагинов, на любой вкус
• Можно быстро начать (важно!)
• Подходит даже для не-инженеров
• Качественное внутреннее устройство
А теперь о проблемах
все через GUI
• нет интеграции конфигов с svn/git
• нет шаблонов
нестабильность
• Выбрать нормальный релиз — проблема
• Иногда что-нибудь да падает
хранение файлов
• Встроенный механизм хранения — медленный
• Да и стратегии очистки не гибкие
• Отсутствует релиз-менеджмент
группировка задач
• Штатными средствами группу задач не собрать
• Тяжело передавать файлы между задачами
остается “мусор”
• Нет нормальных стратегий очистки
• Кэширование?
что можно улучшить
разворачивание из git
• Поймите, из каких частей состоит проект
• Идентифицируйте общие параметры
• Сделайте простой шаблонизатор
• Воспользуйтесь Jenkins API
придумайте структуру
• Jenkins бывает чересчур гибким
• Без правил ваш проект превратится в кашу
• Пример — именование билд задач
Используйте BuildFlow
• Это такой плагин для Jenkins
• Сделан для управления группой задач
• Позволяет собирать части проекта параллельно
храните файлы “снаружи”
• Например, на FTP/HTTP
• Или, лучше в Artifactory
релиз менеджмент
• Напишите себе скрипты для создания релизов
• И запускайте их из Jenkins, по “кнопке”
• Используете Artifactory? У нас есть готовый код!
скрипты очистки
• Не пренебрегайте “системными скриптами”!
• На Groovy можно “подкостылить” без плагина
• Например, очистку диска из-под сложных проектов
что еще можно сделать?
подумайте о проекте
• Разбейте проект на логические компоненты
• Постройте граф зависимостей
• Постарайтесь его “расплющить”
управляйте конфигурацией
• Используйте Chef
• … или Puppet
• … или Ansible
• Хоть что-нибудь
попробуйте Vagrant
• Мало кто знает, но его можно “звать” из Jenkins
• Мы так тестируем свой сайт
делитесь опытом
• По Jenkins почти не пишут книг
• Ваша лучшая ставка — сообщество
• Пишите нам :)
• Ну или читайте советы гуру. Например, Rackspace