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

Ansible: тестируем плейбуки (часть 2)

Итак, в нашей прошлой статье мы рассмотрели как можно быстро и просто настроить среду для тестирования плейбуков и ролей Ansible. Это всё, конечно, очень хорошо и удобно, но почему бы нам не автоматизировать весь процесс внесения изменений в инфраструктуру от написания плейбука до внесения изменений на сервера?

image

Напомню несколько условий, при которых мы будем выполнять тестирование конфигураций:

1. Вся конфигурация хранится в git-репозитории;
2. Jenkins периодически опрашивает git-репозиторий с нашими ролями/плейбуками на предмет внесённых изменений;
3. При появлении изменений Jenkins запускает job с тестированием конфигурации. Тесты состоят из двух этапов:
3.1 Kitchen-CI берёт обновленный код из репозитория, запускает полностью свежий docker-контейнер, заливает в них обновлённые плейбуки из репозитория и запускает Ansible локально, в docker-контейнере;
3.2 Если первый этап прошёл успешно, в docker-контейнере запускается serverspec и проверяет, корректно ли встала новая конфигурация;
4. Если в Kitchen-CI все тесты прошли успешно, то Jenkins инициирует заливку новой конфигурации.

В идеале, весь процесс от написания плейбука и коммита в репозиторий до внесения изменений на сервера, должен проходить без нашего участия. Сильно углубляться в установку Jenkins и подробно расписывать о пайплайнах в данной статье не планируется. Первое делается без проблем из стандартных репозиториев, а второе — сугубо индивидуальное.

Jenkins

Итак, что же это такое и с чем его едят? Jenkins — это сервис непрерывной интеграции, активно используется для построения и автоматизации процесса разработки от написания кода до выкатки в продакшн. Это достаточно гибкий инструмент с большой историей и обширной поддержкой сообщества. Для него существует неисчисляемое множество плагинов и надстроек. Довожу до вашего сведения, что скоро выйдет версия 2.0. Если мы используем инфраструктуру как код, то почему бы и нам не пойти по этому пути?

Как я упоминал ранее, Jenkins можно поставить из стандартного репозитория (в нашем случае — Debian, но есть репозитории и для других ОС [1] )

sudo apt-get install jenkins

Далее нам необходимо дать для Jenkins возможность запускать kitchen и docker-контейнеры:
Редактируем sudoers:

visudo -f /etc/sudoers.d/jenkins

Даём возможность запускать docker

jenkins ALL=(ALL) NOPASSWD: /usr/bin/docker

Перезапускаем Jenkins:

service jenkins restart

И заходим браузером на дэшборд.

Теперь нам нужно составить сценарий для того чтобы Jenkins делал всю работу за нас. Для начала создадим Item со свободной конфигурацией:

Ansible: тестируем плейбуки (часть 2) - 2

В настройках системы контроля версий выбираем git, указываем путь к git-репозиторию и учётные данные для подключения. Если вы храните всю конфигурацию в одном репозитории, то, возможно, будет удобно использовать sparse с указанием папки проекта, который будете тестировать и деплоить.

Ansible: тестируем плейбуки (часть 2) - 3

В триггерах сборки указываем периодически опрашивать SCM и устанавливаем интервал с которым будем опрашивать наш git. В этом случае следующие шаги задачи будут начинаться только если в репозиторий были внесены изменения.

Далее, в шагах сбоки указываем «Выполнение команды shell» и просто указываем шаги, которые необходимы для запуска теста плейбука и разливки:

sudo kitchen test

На этом этапе kitchen-ci запускает наши docker-контейнеры, запускает Ansible с плейбуком локально, затем запускает внутри контейнера serverspec. При желании шаги можно разделить на converge и verify.

ansible-playbook site.yml

Запускает разливку конфигурации, указанной в роли/плейбуке. Последний шаг, также, по желанию. Кто-то может не доверять машине разливать конфигурацию и делать это вручную при условии, что тесты прошли успешно. Для этого можно установить плагин для отсылки уведомления (e-mail, IRC, XMPP, благо их там много) и добавить post-build action. Таким образом, после тестов будет отправлено уведомление об удачной или неудачной сборке.

Спасибо за внимание. Удачных тестов и автоматизации!
Автор: DevOps-администратор Southbridge [2] — Виктор Батуев.

Ссылки

Ansible [3]
Jenkins [4]
Kitchen-CI [5]
Serverspec [6]

Автор: Centos-admin.ru

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/tdd/151441

Ссылки в тексте:

[1] есть репозитории и для других ОС: http://pkg.jenkins-ci.org/

[2] Southbridge: https://southbridge.ru

[3] Ansible: https://www.ansible.com/

[4] Jenkins: https://jenkins.io

[5] Kitchen-CI: http://kitchen.ci/

[6] Serverspec: http://serverspec.org/

[7] Источник: https://habrahabr.ru/post/304814/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best