zc.buildout Обзор инструмента для автоматизации сборки программ и подготовки окружения для их выполнения. Кирилл Кузьминых (Cykooz) ASD Technologies 2017
3 История создания Zope Corporation, начало 2000-ых: – помощь клиентам в соборке приложений на базе Zope; – очень большое разнообразие окружения - главная сложность в развёртывании приложения; – получение предскажуемого результата требует как то изолироваться от клиентского окружения. Решение: – собственная сборка Python в которую устанавливалось приложение; – автоматизация с помощью make.
4 История создания 2005 год: – приложения становятся сложнее – возникает желание использовать Python для автоматизации развёртывания; – внутренний прототип системы с конфигом на базе формата ConfigParser – секции описывали вещи, которые надо собирать; – несколько встроенных рецептов для сборки и возможность создавать сторонние рецепты; – всё ещё используется своя сборка Python для изоляции. Результат: решенно сделать zc.buildout.
5 История создания Появились setuptools и easy_install. Они автоматизировали скачивание и установку пакетов и их зависимостей. Результат: новая версия zc.buildout использует setuptools. Но easy_install устанавливал зависимости, но не обновлял их. Результат: следующая версия zc.buildout использует setuptools на более низком уровне, реализуя свою логику работы с пакетами.
7 Что это такое? Инструмент для автоматизации сборки программного обеспечения – Запуск инструментов для сборки программ – Выполнение программ и шаблонов для создания скриптов и конфигов – Применим на всех стадиях, от разработки до выкатки
8 Что это такое? Это не совсем: – Make или Apache Ant Buildout – более высокоуровневый. Он сам может использовать make и ant как часть процесса сборки. – Puppet, chef и др. Buildout – сфокусирован на конкретном приложении. Puppet, chef и др. могут использовать buildout для решения своих задач.
9 Что это такое? Принципы: – Воспроизводимость – результат сборки должен быть одинаков в одинаковом окружении (OS и версия Python). – Автоматизация – с помощью одной/двух простых команд должна получаться готовая к работе система. – Приложение должно быть самодостаточным настолько насколько это возможно.
29 Макросы [server] recipe = zc.zdaemonrecipe port = 8080 program = ${buildout:bin-directory}/serve --port ${:port} --name ${:_buildout_section_name_} [server1] <= server port = 8081 [server2] <= server port = 8082
33 Рецепты Рецепт: – это компонент реализующий логику "части"; – является обычным питонячим классом с методами: ● install() ● update() – в одном пакете может быть несколько рецептов; – Buildout автоматически скачивает и устнаваливает пакеты с рецептами.