- PVSM.RU - https://www.pvsm.ru -

Сегодня многие говорят о DevOps [1] как о методологии, которая помогает разрушить «железный занавес» между IT отделном, QA и программистами и создать некий общий механизм, помогающий делать продукты быстрее и качественнее. Основная задача, которая встает перед DevOps разработчиком — это добиться максимальной автоматизации развертывания development. testing, production сред и переходов между ними. Соответственно одна из основных проблем в данном случае — это соблюсти полную идентичность сред разработки, тестирования и эксплуатации. Под катом приведу пример практического решения данной задачи, которое я использовал в нескольких компаниях в ходе интеграции DevOps методологии.
Так как речь идет о рабочем примере, сразу опишу те ограничения, которые задаются при решении данной задачи:
Для CentOS 6:
На момент когда я впервые задался этой проблемой, готовых решений небыло, да и сейчас это довольно специфический момент и общих решений я пока не нашел. Как правило это какие-то внутренние скрипты, которые затачиваются под конкретные продукты.
Чтобы унифицировать это решение я разработал утилиту build-tools https://github.com/scopenco/build-tools [3], которая позволяет создавать RHEL [4], CentOS [2], Fedora [5], Scientific [6] yum репозитарии с метапакетом (пакет проекта) на базе XML спецификаций(aka ролей). Роли описывают набор обязательных пакетов и репозитариев, откуда эти пакеты вместе с зависимостями скачиваются в локальный yum репозитарий (aka билд). Данный репозитарий используется в качестве пакетной базы для продукта.
Итак, установка build-tools [3] очень простая и описана в README [7].
Перейдем к спецификациям проектов.
Пример спецификации для СentOS 5:
<?xml version="1.0" encoding="UTF-8"?>
<project
name="myproject"
summary="My First Project"
repository="http://repo.domain.com/pub/repo/"
version="0.1"
>
<!-- role with minimal set of packages -->
<role path="roles/centos-5-minimal.xml" />
<!-- python packages -->
<package name="python" version="2.4.3" />
<package name="python-IPy" />
<package name="python-simplejson" />
<!-- mysql packages -->
<package name="mysql-server" version="5.0.95" />
<!-- yum repos -->
<role path="repos/centos-5-base.xml" />
<role path="repos/centos-5-updates.xml" />
<role path="repos/centos-5-epel.xml" />
</project>
Пример спецификации для СentOS 6:
<?xml version="1.0" encoding="UTF-8"?>
<project
name="myproject"
summary="My First Project"
repository="http://repo.domain.com/pub/repo/"
version="0.2"
>
<!-- role with minimal set of packages -->
<role path="roles/centos-6-minimal.xml" />
<!-- python packages -->
<package name="python" version="2.6.6" />
<package name="python-IPy" />
<package name="python-simplejson" />
<!-- mysql packages -->
<package name="mysql-server" version="5.1.71" />
<!-- yum repos -->
<role path="repos/centos-6-base.xml" />
<role path="repos/centos-6-updates.xml" />
<role path="repos/centos-6-epel.xml" />
</project>
Разница по сути только в подключаемых yum репозитариях и ролях с минимальным набором пакетов.
Для сборки yum репозитария и мета пакетов можно воспользоваться готовыми скриптами, а можно и написать свои с более глубокой автоматизацией и интеграцией в процесс разработки.
cd src
cp ../repository .
./build-el5.sh
./build-el6.sh
Сборка репозитариев выполняется обязательно на CentOS 5. Причиной этому является тот факт, что yum обратно не совместим и репозитарии, собранные через yum API CentOS 6 не будут ставиться на CentOS 5 машины, тогда как репозитарии, собранные на CentOS 5 ставятся на CentOS 6, Fedora 13 и выше, Scientific 5 и выше.
После запуска сбоки на выходе получается 2-а репозитария, с которых можно заливать физические и виртуальные сервера по kickstart [8]. Таким образом фиксируется набор софта, который можно хранить в корпоративном репозитарии и использовать для разворачивания продукта.
Можно создавать новые роли с публичными yum репозитариями и пакетами для кастомизации сред.
Рассмотрим несколько популярных вариантов:
Подробное описание атрибутов можно найти в wiki build-tools [9].
Если говорить об обновлении, которое рано или поздно случается, то в данном случае достаточно будет инкриментировать версию в спецификации проекта и пересобрать билд. Получится новый билд с новой версией, который можно разворачивать либо обновлять в средах разработки, тестирования и эксплуатации.
Итоги:
Таким образом, используя build-tools [10] мне удалось:
Автор: scopenco
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/52419
Ссылки в тексте:
[1] DevOps : http://devopswiki.net/index.php/DevOps
[2] CentOS: http://centos.org
[3] https://github.com/scopenco/build-tools: https://github.com/scopenco/build-tools
[4] RHEL: http://www.redhat.com
[5] Fedora: http://fedoraproject.org
[6] Scientific: https://www.scientificlinux.org/
[7] README: https://github.com/scopenco/build-tools/blob/master/README.md
[8] kickstart: http://ru.wikipedia.org/wiki/Kickstart
[9] wiki build-tools: https://github.com/scopenco/build-tools/wiki
[10] build-tools: http://github.com/scopenco/build-tools
[11] Источник: http://habrahabr.ru/post/208558/
Нажмите здесь для печати.