Миграция кода с использованием автоматизации DevOps

Tags: DevOps, автоматизация, миграция данных, GitHub

Миграция из одной системы управления кодом в другую - нетривиальная задача. Командам важно поддерживать историю кода, структуру ветвей, разрешения и интеграции.  Рассмотрим случай миграции с Bitbucket в GitHub крупной медицинской компании.

Обнаружив, что команды разработчиков использовали несколько систем управления исходным кодом, что приводило к увеличению затрат на поддержание задвоенных операций и стоимости лицензий, компания выбрала  GitHub  в качестве единой платформы для управления исходным кодом.  Корпоративный продукт GitHub предлагает ряд преимуществ, включая интеграцию инструментов, понятный интерфейс для управления проектами и командами и уведомление о событиях, опцию для облачного или локального развертывания платформы управления исходным кодом.

Миграция нескольких тысяч репозиториев - серьезная проблема. От команды DevOps требуется соблюдение сроков продления лицензии. Во избежание дополнительных затрат, командам требуется перенести базу кода и связанные метаданные.  В подходе, описанном ниже, используются следующие инструменты CloudBees Jenkins™ , Red Hat Ansible™ playbooks и скрипты Python.

Подход

Рис 1 демонстрирует, что миграция включает создание процесса миграции Jenkins для определения исходного проекта  Bitbucket, целевой проект GitHub, информация о принадлежности команды, информация о репозитории, дополнительные требования для интеграции. Эта информация сохраняется в новом файле, добавленном в корень исходного дерева (‘app-info.yml’). Такой подход упрощает будущую автоматизацию интеграции и обеспечивает понятный способ отслеживания метаданных приложения в базе.

Рис 1 Процесс автоматизации миграции в Github

В автоматизации миграции прорабатываются факторы, включая обеспечение целевого проекта GitHub соответствующими разрешениями видимости, использование стандартов наименования проектов, интеграция с существующей или будущей автоматизацией сканирования безопасности, применение правил защиты, определенные организацией и поддержка автоматизации необходимых конвейеров CI/CD.

Трансфер кода

И хотя технически клонирование кода в новый репозиторий - элементарный вариант, но требует значительных ручных изменений в нескольких ключевых файлах автоматизации, находящихся в корне структуры папок проекта.  К сожалению, принимая во внимание, что каждая команда разработчиков использует определенную версию библиотеки, этот шаг выполняется вручную, а не автоматическим.

Правила защиты

Организация установила набор правил управления версиями деревьев. Например, политика требует, чтобы запрос был одобрен хотя бы одним проверяющим до того, как код объединится для ветвей  ‘master’, ‘release’, и ‘develop’ в репозитории. Эти правила закодированы в скриптах миграции python и извлекаются из Ansible playbook во время создания проекта GitHub.

Автоматизированные изменения конвейера CI/CD 

Для поддержки существующих конвейеров CI/CD переносимые базы кода требовали обновления файла конфигурации конвейера.  Сюда входили ссылки на конфигурацию для автоматического обновления Jira, автоматическое сканирование безопасности, интеграции с библиотекой package control. Эти изменения были записаны в скриптах python и извлечены из Ansible playbook во время миграции кода в GitHub.

Управление ключами доступа и учетными записями

Автоматизированные процессы  CI/CD требуют использования учетных записей и общедоступного секретного ключа для правильного функционирования.  В процессе миграции важно сохранить эти ключи доступа для предотвращения неправильного использования журналов, уведомлений или других небезопасных отчетов. Команда миграции использовала функцию  Ansible vault и скрипты Groovy  для обновления встроенной системы управления учетными записями Jenkins, чтобы гарантировать безопасную передачу ключей проекта/учетных записей во вновь созданные связанные джобы   GitHub в процессе миграции.

GitHub Pre-Migration Setup

Интеграция GitHub Jenkins построена как отдельная задача для создания "команды"  GitHub. Сюда входят конфигурация команды с собственным именем, административные пользователи и соответствие в папке сборки Jenkins. Для каждого репозитория также установлен Jenkins “web-hook” для гарантии того, что для каждого запуска конвейера CI/CD используется соответствующий мастер Jenkins.

Интеграция автоматизированного тестирования

Как часть контроля качества кода сканирование кода привязано к определенному репозиторию  и подразумевается как часть рабочего процесса Jenkins CI/CD. Результаты сканирования отображаются в отдельной вкладке  GitHub. Таким образом, созданный проект может напрямую сообщать разработчикам результаты автоматизированного анализа качества кода.

Результаты

Команде поддержки DevOps было необходимо уложиться в 4 мес для завершения полной миграции с Bitbucket to GitHub и избежать расходов на продление лицензии. Принимая во внимание масштаб проблемы, единственное подходящее решение - автоматизация большей части миграции. Использование комбинированного инструмента, состоящего из скриптов Jenkins, Ansible playbooks и сценариев Python, позволило команде DevOps успешно завершить процесс миграции и модификации всех баз кода за несколько недель до дедлайна.  Как результат, все команды активны в GitHub, а репозитории Bitbucket  заархивированы.

No Comments

Add a Comment