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

GitLab CI — это эффективный инструмент для самых разных сценариев, включая инфраструктуру как код. GitLab можно использовать с разными инструментами, но в этой демонстрации мы возьмем Ansible, потому что именно его чаще всего используют разработчики при подходе «инфраструктура как код». Вот демо с двумя маршрутизаторами [1] из курса по сетям Ansible [2].
Прелесть GitLab CI [3] в том, что код из плейбука Ansible [4] можно изменять и поставлять, не устанавливая никаких зависимостей локально. Демо-проект, который вызывает обновление строк SNMP на всех устройствах каждый месяц в соответствии с нашей политикой безопасности, можно полностью выполнить на GitLab.com [5], нашем сервисе размещения кода.
Для начала откройте плейбук Ansible, где есть 4 задачи:
В этом демо мы сосредоточимся на настройке строк SNMP, для которой нужно выполнить несколько простых шагов.
Любой план на GitLab начинается одинаково: с задачи [6]. Итак, первый шаг рабочего процесса GitLab — проверить доску задач в проекте ansible-demo [7]. На доске задач ansible-demo [8] мы уже видим задачу: изменить строки SNMP на всех маршрутизаторах [9]. В задаче есть ссылка на wiki-страницу политики безопасности GitLab, где сказано, что строки SNMP нужно обновлять каждый месяц, и для операций «только для чтения» и «чтение и запись» должны быть разные строки.

Политика безопасности GitLab предписывает обновлять строки SNMP каждый месяц.
Потом нужно проверить, что команды для настройки строк SNMP в демо с двумя маршрутизаторами [1] не нарушают политику безопасности GitLab, описанную в задаче.

Команды для настройки строк SNMP доступны в плейбуке Ansible.
Потом вернитесь к задаче, назначьте ее себе и смените ярлык с to-do на doing на правой панели или просто перетащите задачу на доске из одного столбца в другой.
Теперь нужно создать из задачи мердж-реквест. Убедитесь, что у мердж-реквеста есть флаг Work in Progress (WIP) [10], чтобы он не попал в мастер преждевременно. Вместо локального подключения мы используем GitLab Web IDE [11], потому что изменения в строках SNMP незначительны.
Вы обновили строку SNMP по инструкции, а теперь нужно закоммитить изменения. Откройте параллельное сравнение изменений, чтобы убедиться, что мердж-реквест содержит последний коммит.
[14]
Инструмент параллельного сравнения наглядно показывает изменения.
Коммит изменений автоматически запустит пайплайн GitLab CI. Он выполнит следующие задачи:
Мы видим прогресс и выходные данные каждого задания в пайплайне GitLab CI, который обновляет SNMP.
[15]
Выходные данные вашей задачи показывают, что обновления SNMP в искусственной среде прошли успешно.
Все эти задачи будут запущены и задокументированы в мердж-реквесте.
[16]
Галочки показывают, что задача в пайплайне GitLab CI выполнена.
Затем войдите в маршрутизаторы для демо и посмотрите изменения.
[17]
Изменения строк SNMP RO и RW отражены в маршрутизаторах.
Можно выполнить дополнительный шаг — одобрение мердж-реквеста [18]. Если вы настроите одобрение, несколько пользователей смогут проверить изменения, прежде чем они попадут в продакшен.
[19]
Мердж-реквест можно настроить так, чтобы другой пользователь проверял ваши труды, прежде чем они окажутся в мастере.
Изменения можно передать в мастер сразу после тестирования. Мастер — это главная ветвь, которая содержит код рабочей среды.
Когда будете готовы, нажмите кнопку Resolve Work In Progress. Затем нажмите Merge.
Когда вы разрешите статус WIP, мердж-реквест можно будет отправить в мастер, а задачу — закрыть.
Новый пайплайн прогонит все тесты, которые вы выполнили на дополнительном шаге запуска плейбука в продакшене.
Следите за прогрессом и логами на экране пайплайна. Когда процесс завершится, войдите в рабочие маршрутизаторы и убедитесь, что строки SNMP изменились.
Все это возможно благодаря магии GitLab CI. Пайплайны GitLab CI — это ряды последовательных задач, которые выполняют все необходимое для тестирования и реализации кода Ansible.
Вся конфигурация GitLab CI умещается в простом файле YAML, который хранится в репозитории .gitlab-ci.yml.
В этой демонстрации файл .gitlab-ci.yml содержит 3 этапа.
GitLab CI запускается с базовым образом. В этом случае мы используем образ Docker, который содержит весь необходимый код и зависимости Ansible. Укажите команды, которые будут выполняться на каждом этапе, и зависимости.

Простой файл YAML содержит три этапа GitLab CI.

Этап демонстрации GitLab CI, на котором выполняется плейбук Ansible.
Мы заглянули внутрь пайплайна и увидели, как можно использовать GitLab CI, чтобы создать инфраструктуру как код, даже не устанавливая зависимости Ansible на компьютер. Это лишь один пример того, как можно использовать GitLab CI, чтобы реализовать инфраструктуру как код. Полное руководство смотрите в видео:
Автор: nAbdullin
Источник [20]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/323967
Ссылки в тексте:
[1] демо с двумя маршрутизаторами: https://gitlab.com/bdowney/ansible-demo/blob/master/ci-cd-demo/ci.yml
[2] курса по сетям Ansible: https://github.com/ansible/workshops
[3] GitLab CI: https://about.gitlab.com/product/continuous-integration/
[4] плейбука Ansible: https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html
[5] GitLab.com: https://about.gitlab.com/pricing/#gitlab-com
[6] с задачи: https://about.gitlab.com/handbook/marketing/product-marketing/getting-started/101/
[7] проекте ansible-demo: https://gitlab.com/bdowney/ansible-demo/-/boards
[8] доске задач ansible-demo: https://gitlab.com/bdowney/ansible-demo/issues
[9] изменить строки SNMP на всех маршрутизаторах: https://gitlab.com/bdowney/ansible-demo/issues/4
[10] есть флаг Work in Progress (WIP): https://docs.gitlab.com/ee/user/project/merge_requests/work_in_progress_merge_requests.html
[11] Web IDE: https://docs.gitlab.com/ee/user/project/web_ide/
[12] политикой безопасности GitLab: https://gitlab.com/bdowney/ansible-demo/wikis/Security-Policies
[13] задаче: https://gitlab.com/bdowney/ansible-demo/issues/1
[14] Image: https://habrastorage.org/webt/ty/mu/tl/tymutlrb0j3nuqyzfwxoqc2th4w.png
[15] Image: https://habrastorage.org/webt/lj/rs/j-/ljrsj-pjvo3nt9lium7i8hteppw.png
[16] Image: https://habrastorage.org/webt/ti/bw/th/tibwthey3l5eh4y8ptkhmbatvnk.png
[17] Image: https://habrastorage.org/webt/4p/aw/gk/4pawgkkbstl7zabuhx8rvkptw3i.png
[18] одобрение мердж-реквеста: https://docs.gitlab.com/ee/user/project/merge_requests/merge_request_approvals.html
[19] Image: https://habrastorage.org/webt/he/9r/ao/he9raoggmoodfpympqay18gq4sq.png
[20] Источник: https://habr.com/ru/post/459984/?utm_source=habrahabr&utm_medium=rss&utm_campaign=459984
Нажмите здесь для печати.