26
Chef по обе стороны Bamboo Сергей Валиев Артем Семенов

Chef по обе стороны Bamboo / Артем Семенов (Align Technology)

  • Upload
    ontico

  • View
    253

  • Download
    3

Embed Size (px)

Citation preview

Chef по обе стороны BambooСергей ВалиевАртем Семенов

О НасАртем СеменовManager, DevOps Tooling @tema_typuct

Сергей ВалиевSr. Enginer, DevOps Toolin @va1iev

Align TechnologyМеждународная медицинская компания

Деплоим из Bamboo

Наше решение

• Времена Chef 10 & Bamboo 4.x• Решили запускать деплойменты из CI (Bamboo)

• Что для этого нужно?– Запускать chef-client на нужных нодах– Получать результат выполнения chef-client– Параметризовать запуск– Синхронизоваться с другими деплойментами и тестами– Запуск тестовых планов– Маркировать билд-планы и артефакты по результатам

деплоймента

Деплоим из Bamboo

Деплоим из Bamboo• Что для этого нужно?

– Запускать chef-client на нужных нодах– Получать результат выполнения chef-client– Параметризовать запуск– Синхронизоваться с другими деплойментами

и тестами– Запуск тестовых планов– Маркировать билд-планы и артефакты по

результатам деплоймента

Начало – call_chef_client.py• subprocess.Popen, если вы понимаете о чем я• login_win, password_win в коде• knife ssh, потом knife winrm• print '<<<<<Knife stderr below>>>>>'

• Все работает!

Аппетит приходит во время еды

• Определение проблем на Windows: knife winrm --returns 0

• Анализ вывода knife при помощи регулярных выражений: re.compile(r"STDERR:.*?Deployment\sFailed.*?WLSTException.*?$", re.I | re.M | re.S)

• Управление credentials для разных сред: if args.env.lower() == 's3'

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

Next step• Стали делать CI для cookbooks• Cхожие задачи с call_chef_client.py• Нужно было название получше

• Решили перейти на фреймворк для интеграции в CI:

Chef-CI-helpers

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– На разные сервера

Chef-CI-helpers: Functionality #2

• Тестирование chef-кода– Chef-spec– Foodcritic– Валидация JSON

• Bamboo CI management– Запуск билд планов / конфигураций (параметризованный)– Синхронизация при доступе к разделяемым ресурсам– Маркировка билд-планов и артефактов

Особенности решения

• Все в одном месте – нет дублирования кода• Релиз процесс

– Gem– Тестирование (в том числе unit)

• Прозрачное версионирование – Фрейморк версионируется вместе с инфраструктурой и приложениями

• Простое переиспользование сторонних компонентов– Ruby Gems FTW!

• Быстро добавляем новую функциональность– Так как модульная структура

Что получилось1. Собираем

2. Синхронизируем

3. Деплоим

4. Тестируем

5. …

6. Profit

• Реализовать поддержку динамических сред/энвайроментов– Привет, облака!

• Убрать всю Bamboo-функциональность в отдельный модуль

Дальнейшее развитие

• «Более лучшее» Продвинутое управление секретами– Key rotation

– JumpCloud?

• ChatOps?

Дальнейшее развитие 2

CM для Bamboo фермы

CM для Bamboo• В портфолио компании софт, с основанный на

разных стеках технологий: Ruby, .NET, C++, Python, Java, R– Даже R, Карл!

• Все собирается на CI ферме• По мере организации CI процесса росло

количество агентов и конфигураций – (80+ агентов, 130+ конфигураций)

CM для Bamboo #2• Отнимающий много времени процесс настройки

нового агента– Настройка/конфигурация нового билд-агента– Установка необходимого софта– Регистрация capability в bamboo

• Нужно– упростить выкатку нового софта. – автоматически регистрировать софт, который уже есть– собирать custom capability автоматически (location, os,

cpu2+, cpu4+)– автоматический обновять информацию на сервере Bamboo

• Универсальный агент? Не, не слышал.

#тыжпрограммист

• упростить выкатку нового софта. Chef

• собирать custom capability автоматически (location, os, cpu2+, cpu4+)

Ohai-plugin• автоматически регистрировать legacy-софт

Chef recipe• автоматический обновять информацию на сервере

BambooChef_handler report

#тыжпрограммист 2

Use the Chef, Luke

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

Дальнейшее развитие

• Создание и конфигурация Windows build-агентов c нуля

• Ohai-плагин для сбора вспомогательных данных• Избавление от костылей• Миграция конфигурирования всех агентов с

помощью align-agency• Going public?

Q&A