Сергей Белов "bem server: система сборки фронтенда"

60
Я.Субботник, Киев, 5 мая 2012 года Руководитель группы разработки инструментов С ергей Белов bem server система сборки фронтенда

Upload: yandex

Post on 08-Jul-2015

1.205 views

Category:

Technology


6 download

DESCRIPTION

Рассказ о том, как в Яндексе собирали сервисы раньше, как их собирают сейчас и как их будут собирать в ближайшем будущем. Ответы на вопросы о том, что такое bem server, почему начали его разработку и какие проблемы он призван решить.

TRANSCRIPT

Page 1: Сергей Белов "bem server: система сборки фронтенда"

Я.Субботник, Киев, 5 мая 2012 года

Руководитель группы разработки инструментовСергей Белов

bem serverсистема сборки фронтенда

Page 2: Сергей Белов "bem server: система сборки фронтенда"

Расскажу

2

— Что такое система сборки

— Что мы пробовали использовать

— Почему и зачем разрабатываем свою систему

— Как разрабатываем bem server

Page 3: Сергей Белов "bem server: система сборки фронтенда"

Что такое система сборки?

Page 4: Сергей Белов "bem server: система сборки фронтенда"

Это программа, которая автоматизирует

Page 5: Сергей Белов "bem server: система сборки фронтенда"

автоматизируетСистема сборки

— сборку конечных файлов из исходных

— запуск тестов

— обработку статистической информации (proAling)

— развёртывание в production

— подготовку changelog к релизу

— и т.д.

5

Page 6: Сергей Белов "bem server: система сборки фронтенда"

Система сборкисостоит из ядраи пользовательского кода

Page 7: Сергей Белов "bem server: система сборки фронтенда"

ядроСистема сборки

— определяет предметную область и язык описания правил сборки

— читает правила сборки

— выполняет сборку

7

Page 8: Сергей Белов "bem server: система сборки фронтенда"

CC=gccCFLAGS=-I.DEPS = hellomake.hOBJ = hellomake.o hellofunc.o

%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS)

hellomake: $(OBJ) gcc -o $@ $^ $(CFLAGS)

пользовательский кодСистема сборки

8

Page 9: Сергей Белов "bem server: система сборки фронтенда"

Паттерны

Page 10: Сергей Белов "bem server: система сборки фронтенда"

«треугольник»Граф зависимостей

10

Page 11: Сергей Белов "bem server: система сборки фронтенда"

«трапеция»Граф зависимостей

11

Page 12: Сергей Белов "bem server: система сборки фронтенда"

«трапеция»Граф зависимостей

12

Page 13: Сергей Белов "bem server: система сборки фронтенда"

«трапеция»Граф зависимостей

13

Page 14: Сергей Белов "bem server: система сборки фронтенда"

«трапеция»Граф зависимостей

14

Page 15: Сергей Белов "bem server: система сборки фронтенда"

15

Page 16: Сергей Белов "bem server: система сборки фронтенда"

Ручной запуск утомляет

Page 17: Сергей Белов "bem server: система сборки фронтенда"

Будем следить за файлами!

Page 18: Сергей Белов "bem server: система сборки фронтенда"

Мониторинг измененийна файловой системе

✓ Автоматизирует запуск сборки

✓ Хорошо работает для «треугольников»

18

Page 19: Сергей Белов "bem server: система сборки фронтенда"

Мониторинг измененийна файловой системе

— Плохо работает для «трапеций»

19

Page 20: Сергей Белов "bem server: система сборки фронтенда"

Мониторинг измененийна файловой системе

— Плохо работает для «трапеций»

20

Page 21: Сергей Белов "bem server: система сборки фронтенда"

Мониторинг измененийна файловой системе

— Плохо работает для «трапеций»

— Сборка может быть долгой, нет гарантии получить свежий результат при обращении к файлу

21

Page 22: Сергей Белов "bem server: система сборки фронтенда"
Page 23: Сергей Белов "bem server: система сборки фронтенда"

Сервер

✓ Запуск сборки по запросу

23

Page 24: Сергей Белов "bem server: система сборки фронтенда"

«трапеция»Сервер

24

Page 25: Сергей Белов "bem server: система сборки фронтенда"

Сервер

✓ Запуск сборки по запросу

✓ Собирает файлы точечно

✓ Хорошо работает для «треугольников» и «трапеций»

25

Page 26: Сергей Белов "bem server: система сборки фронтенда"

Требования— сборка по запросу (http сервер), точечные цели

— предметная область сборки в БЭМ терминах

— не Ale-based

— параллельная сборка

— выразительный язык для описания правил сборки

— запуск нескольких процессов сборки одновременно

26

Page 27: Сергей Белов "bem server: система сборки фронтенда"

несколько процессов сборкиТребования

27

Page 28: Сергей Белов "bem server: система сборки фронтенда"

make-платформа

Page 29: Сергей Белов "bem server: система сборки фронтенда"

make-платформа

29

— GNU make

— библиотека .mk файлов

— подключается в проектный GNUmakeAle через include

— конфигурируется через переменные и шаблоны

Page 30: Сергей Белов "bem server: система сборки фронтенда"

GNU make

30

— плохой синтаксис

— бедные базовые типы данных: всё на строках

— многое нужно выражать через файлы

— что-то сложное нужно писать в виде внешних скриптов

— бедный pattern matching

Page 31: Сергей Белов "bem server: система сборки фронтенда"

GNU make

31

— две стадии: генерация целей, сборка

— нет возможности переопределять цели, только доопределять

— нет возможности параллельных запусков make, пересекающихся друг с другом

Page 32: Сергей Белов "bem server: система сборки фронтенда"

Другие системы сборки

32

Типы систем

— генераторы правил make из правил на своём языке: automake, cmake

— «клоны» make на другом языке: rake, jake, ant

— как make, но с исправлением некоторых его недостатков: ninja, tup, fabricate, redo, shake

Небольшой обзор: http://ya.cc/m

Page 33: Сергей Белов "bem server: система сборки фронтенда"

Другие системы сборкиНедостатки схожи с make

— Ale-based

— нет «сервера»

— ещё один язык

33

Page 34: Сергей Белов "bem server: система сборки фронтенда"

Эксперименты

Page 35: Сергей Белов "bem server: система сборки фронтенда"

Monkey Joe

— на JavaScript (NodejS)

— конфиги на JavaScript

— использует inotify

— для сборки вызывает make

https://github.com/afelix/mjoe

35

Page 36: Сергей Белов "bem server: система сборки фронтенда"

Filesystem in Userspace (FUSE)

— прототип выполнял прямое проксирование на реальную файловую систему

— проверяли на grep -r — оказалось медленно

36

Page 37: Сергей Белов "bem server: система сборки фронтенда"

Требования— сборка по запросу (http сервер), точечные цели

— предметная область сборки в БЭМ терминах

— не Ale-based

— параллельная сборка

— выразительный язык для описания правил сборки

— запуск нескольких процессов сборки параллельно

37

Page 38: Сергей Белов "bem server: система сборки фронтенда"

ДекомпозируемЯдро APW

— reusable

— параллельное выполнение

— запуск нескольких процессов сборки параллельно

— не Ale-based

— правила сборки на JavaScript

38

Page 39: Сергей Белов "bem server: система сборки фронтенда"

Декомпозируемbem make

— точечные цели

— предметная область БЭМ

bem server

— сборка по запросу

39

Page 40: Сергей Белов "bem server: система сборки фронтенда"

Предметная областьArch-Plan-Workers (APW)

— архитектура сборки (Arch)

— состоит из узлов (Node) с простым API: getId() и run()

— планы сборки (Plan)

— пул исполнителей (Workers)

40

Page 41: Сергей Белов "bem server: система сборки фронтенда"

Предметная областьArch-Plan-Workers (APW)

41

Page 42: Сергей Белов "bem server: система сборки фронтенда"

Архитектурные решенияArch-Plan-Workers (APW)

— безусловное выполнение узлов

— модификация архитектуры в процессе сборки

42

Page 43: Сергей Белов "bem server: система сборки фронтенда"

модификация архитектуры сборкиArch-Plan-Workers (APW)

43

Page 44: Сергей Белов "bem server: система сборки фронтенда"

Архитектурные решенияArch-Plan-Workers (APW)

— безусловное выполнение узлов

— модификация архитектуры в процессе сборки

— отдельно от ядра могут существовать библиотеки узлов

— promises-based API using Q:https://github.com/kriskowal/q

44

Page 45: Сергей Белов "bem server: система сборки фронтенда"

Arch-Plan-Workers (APW)

Open Source

https://github.com/bem/apw

45

Page 46: Сергей Белов "bem server: система сборки фронтенда"

это командаbem make

46

— запускается в корне проекта

— сборка всего:bem make

— точечная сборка:bem make pages/index/index.html

— лимит для исполнителей:bem make -w 100

— bem make --help

Page 47: Сергей Белов "bem server: система сборки фронтенда"

bem make

47

— использует apw

— использует возможность достраивать архитектуру сборки

Page 48: Сергей Белов "bem server: система сборки фронтенда"

bem make

48

Page 49: Сергей Белов "bem server: система сборки фронтенда"

bem make

49

Page 50: Сергей Белов "bem server: система сборки фронтенда"

bem make

50

— использует apw

— использует возможность достраивать граф

— библиотека классов узлов про предметную область БЭМ

Page 51: Сергей Белов "bem server: система сборки фронтенда"

БЭМbem make

51

— LevelNode

— BundlesLevelNode

— BemBuildNode

— BemCreateNode

— и т.д.

Page 52: Сергей Белов "bem server: система сборки фронтенда"

bem make

52

— использует apw

— использует возможность достраивать граф

— библиотека классов узлов про предметную область БЭМ

— возможность доопределения и переопределения правил сборки в узлах

Page 53: Сергей Белов "bem server: система сборки фронтенда"

MAKE.decl(‘BundleNode’, {

make: function(ctx) {

if (yourCondition) {// override build rules here

} else {// fallback to defaultreturn this.__base(ctx);

}

}

});

шаблон конфигурации .bem/make.jsbem make

53

Page 54: Сергей Белов "bem server: система сборки фронтенда"

это командаbem server

54

— запускается в корне проекта

— bem server

— задать порт:bem server -p 8081

— лимит для исполнителей:bem make -w 100

— bem server --help

Page 55: Сергей Белов "bem server: система сборки фронтенда"

bem server

55

— http сервер

— внутри использует bem make для сборки запрошенных файлов

— отдаёт файлы с диска после сборки

— показывает листинг директорий

Page 56: Сергей Белов "bem server: система сборки фронтенда"

bem server

56

Page 57: Сергей Белов "bem server: система сборки фронтенда"

bem server

57

Код (ветка server)

http://github.com/bem/bem-tools

Список открытых задач

http://ya.cc/1P

Page 58: Сергей Белов "bem server: система сборки фронтенда"

bem server

58

npm -g install bem@unstable

Page 59: Сергей Белов "bem server: система сборки фронтенда"

Рассказал

59

— Что такое система сборки

— Что мы пробовали использовать

— Почему и зачем разрабатываем свою систему

— Как разрабатываем bem server