Строим CI/CD в Bamboo, используя Chef
-----
Мы покажем эволюционный путь нашего CI/CD-процесса от маленького скрипта на python, до фреймворка на ruby:
+ рассмотрим типичные трудности, возникающие при построении CI/CD процесса с помощью CI-движка и Configuration management tools.
+ покажем реализованные решения на примере связки Chef + Bamboo:
o унификация деплоймент-процесса компании;
o деплойменты на гетерогенные environment'ы, включая Linux/Windows системы;
o инструментарий для построения CD-процесса в Bamboo.
Управление билд-фермой Bamboo с помощью Chef
-----
Для поддержки SDLC-процесса компании мы эксплуатируем большую географически распределенную гетерогенную билд-ферму агентов (80+ агентов на базе Windows, Linux и MacOS). С ростом количества билд-конфигураций и агентов мы столкнулись с задачей управления конфигурациями билд-агентов, с которой успешно справляемся с помощью решения на базе Chef.
Примеры решаемых задач:
+ настройка Bamboo-агентов с нуля;
+ сapability management при помощи ohai;
+ повышение эффективности использования билд-фермы.
7. Деплоим из Bamboo
• Что для этого нужно?
– Запускать chef-client на нужных нодах
– Получать результат выполнения chef-client
– Параметризовать запуск
– Синхронизоваться с другими деплойментами и
тестами
– Запуск тестовых планов
– Маркировать билд-планы и артефакты по
результатам деплоймента
8. Начало – call_chef_client.py
• subprocess.Popen, если вы понимаете о чем я
• login_win, password_win в коде
• knife ssh, потом knife winrm
• print '<<<<<Knife stderr below>>>>>'
• Все работает!
9. Аппетит приходит во время еды
• Определение проблем на Windows:
knife winrm --returns 0
• Анализ вывода knife при помощи регулярных
выражений:
re.compile(r"STDERR:.*?DeploymentsFailed.*?WLSTException.*?
$", re.I | re.M | re.S)
• Управление credentials для разных сред:
if args.env.lower() == 's3'
10. Advance usage
• Обросли функциональностью для CD (like a boss!)
– validate_ids_deploy_params.py
– wait_for_previous_builds.py
– check_build_green.py
– run_test_plan.py
– set_label.py
– set_parent_label.py
– check_build_label.py
11. Next step
• Стали делать CI для cookbooks
• Cхожие задачи с call_chef_client.py
• Нужно было название получше
• Решили перейти на фреймворк для интеграции в CI:
12. Chef-CI-helpers: Functionality
• Deploy App
– Удаленный синхронный платформонезависимый вызов chef-client
• Поддержка разных workflow
– Передача версий через CLI или Databags
– Manual vs On-schedule chef runs
• Windows remote support
– WinRM
– PsExec / RemCom
• Управление секретами
– Поддержка ключей
– Chef-Vault
• Upload артефактов на chef-server
– На разные сервера
13. Chef-CI-helpers: Functionality #2
• Тестирование chef-кода
– Chef-spec
– Foodcritic
– Валидация JSON
• Bamboo CI management
– Запуск билд планов / конфигураций (параметризованный)
– Синхронизация при доступе к разделяемым ресурсам
– Маркировка билд-планов и артефактов
14. Особенности решения
• Все в одном месте – нет дублирования кода
• Релиз процесс
– Gem
– Тестирование (в том числе unit)
• Прозрачное версионирование
– Фрейморк версионируется вместе с инфраструктурой и
приложениями
• Простое переиспользование сторонних компонентов
– Ruby Gems FTW!
• Быстро добавляем новую функциональность
– Так как модульная структура
16. • Реализовать поддержку динамических
сред/энвайроментов
– Привет, облака!
• Убрать всю Bamboo-функциональность в отдельный
модуль
Дальнейшее развитие
17. • «Более лучшее» Продвинутое управление секретами
– Key rotation
– JumpCloud?
• ChatOps?
Дальнейшее развитие 2
19. CM для Bamboo
• В портфолио компании софт, с основанный на разных
стеках технологий: Ruby, .NET, C++, Python,
Java, R
– Даже R, Карл!
• Все собирается на CI ферме
• По мере организации CI процесса росло количество
агентов и конфигураций
– (80+ агентов, 130+ конфигураций)
20. CM для Bamboo #2
• Отнимающий много времени процесс настройки нового
агента
– Настройка/конфигурация нового билд-агента
– Установка необходимого софта
– Регистрация capability в bamboo
21. • Нужно
– упростить выкатку нового софта.
– автоматически регистрировать софт, который уже есть
– собирать custom capability автоматически (location, os, cpu2+, cpu4+)
– автоматический обновять информацию на сервере Bamboo
• Универсальный агент? Не, не слышал.
#тыжпрограммист
22. • упростить выкатку нового софта.
Chef
• собирать custom capability автоматически (location, os,
cpu2+, cpu4+)
Ohai-plugin
• автоматически регистрировать legacy-софт
Chef recipe
• автоматический обновять информацию на сервере
Bamboo
Chef_handler report
#тыжпрограммист 2
Use the Chef, Luke
23. Proof of Concept
• cookbook:
– собирает список установленного софта (attributes, recipe )
– capability-format support (library)
– gentle build agent service management (chef_handler)
– report capabilities to Bamboo server (chef_handler)
– Linux / Windows support
– Support of legacy agents
Align Agency
24. Дальнейшее развитие
• Создание и конфигурация Windows build-агентов c нуля
• Ohai-плагин для сбора вспомогательных данных
• Избавление от костылей
• Миграция конфигурирования всех агентов с помощью
align-agency
• Going public?