37
Распараллеливание сборки Parallels Desktop Константин Назаров [racktear@]

Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

  • Upload
    404fest

  • View
    264

  • 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

Page 1: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

Распараллеливание сборкиParallels Desktop

Константин Назаров [racktear@]

Page 2: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

обо мне

• Работаю в

• В прошлом — системный программист

• Улучшаю процессы в компании

Константин Назаров

Page 3: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

любимый продукт — Parallels Desktop

Page 4: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

что нам удалось сделать

• Быстрее сборка: с 8 часов до 1.3 (в 6 раз)

• Инцидентов меньше в десятки раз

• В 4 раза больше сборок

Page 5: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

зачем я здесь?

• поделиться нашим опытом

• дать готовые, действенные советы (и код!)

• познакомиться с единомышленниками

• научиться новому

Page 6: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

В чем сложности?

• В Parallels Desktop — 19 компонентов

• Одновременно 4-5 активных веток

• Сборка компонента от 20 до 30 минут

Page 7: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

А еще

• Зависимости

• Упаковка и инсталлеры

• Отладочная информация

• Хранение результатов

• Тестирование

Page 8: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

немного истории

Page 9: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

я прошел все стадии• Отрицание

• Гнев

• Торг

• Депрессия

• Принятие

Page 10: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

наши ошибки

Page 11: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

Подход разработчика

• Попытка глубоко продумать архитектуру

• Нежелание делать “быстрые” решения

• Завышенные ожидания качества

Page 12: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

централизация

• централизация ответственности

• сокрытие знаний

Page 13: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

написание кода• То есть попытка сделать CI “с нуля”

• Десятки тысяч строк

Page 14: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

Почему это не работает?

Page 15: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

причины:

• Это дорого

• Ответственность должна быть общей

• Это не ваша компетенция (как компании)

Page 16: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

почему Jenkins?

Page 17: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

очень просто:

• Около 1000 плагинов, на любой вкус

• Можно быстро начать (важно!)

• Подходит даже для не-инженеров

• Качественное внутреннее устройство

Page 18: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

А теперь о проблемах

Page 19: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

все через GUI

• нет интеграции конфигов с svn/git

• нет шаблонов

Page 20: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

нестабильность

• Выбрать нормальный релиз — проблема

• Иногда что-нибудь да падает

Page 21: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

хранение файлов

• Встроенный механизм хранения — медленный

• Да и стратегии очистки не гибкие

• Отсутствует релиз-менеджмент

Page 22: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

группировка задач

• Штатными средствами группу задач не собрать

• Тяжело передавать файлы между задачами

Page 23: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

остается “мусор”

• Нет нормальных стратегий очистки

• Кэширование?

Page 24: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Page 25: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

что можно улучшить

Page 26: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

разворачивание из git

• Поймите, из каких частей состоит проект

• Идентифицируйте общие параметры

• Сделайте простой шаблонизатор

• Воспользуйтесь Jenkins API

Page 27: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

придумайте структуру

• Jenkins бывает чересчур гибким

• Без правил ваш проект превратится в кашу

• Пример — именование билд задач

Page 28: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

Используйте BuildFlow

• Это такой плагин для Jenkins

• Сделан для управления группой задач

• Позволяет собирать части проекта параллельно

Page 29: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

храните файлы “снаружи”

• Например, на FTP/HTTP

• Или, лучше в Artifactory

Page 30: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

релиз менеджмент

• Напишите себе скрипты для создания релизов

• И запускайте их из Jenkins, по “кнопке”

• Используете Artifactory? У нас есть готовый код!

Page 31: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

скрипты очистки

• Не пренебрегайте “системными скриптами”!

• На Groovy можно “подкостылить” без плагина

• Например, очистку диска из-под сложных проектов

Page 32: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

что еще можно сделать?

Page 33: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

подумайте о проекте

• Разбейте проект на логические компоненты

• Постройте граф зависимостей

• Постарайтесь его “расплющить”

Page 34: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

управляйте конфигурацией

• Используйте Chef

• … или Puppet

• … или Ansible

• Хоть что-нибудь

Page 35: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

попробуйте Vagrant

• Мало кто знает, но его можно “звать” из Jenkins

• Мы так тестируем свой сайт

Page 36: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

делитесь опытом

• По Jenkins почти не пишут книг

• Ваша лучшая ставка — сообщество

• Пишите нам :)

• Ну или читайте советы гуру. Например, Rackspace

Page 37: Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac

Q&A

@racktear

bit.ly/ParallelsJenkins