Pull to refresh

Автоматизация сборки поставок от внешних разработчиков

Все началось с того, что нам надоело собирать поставки от внешних разработчиков (ВР) вручную.

В перечень работ входили такие этапы как скачивание поставки, проверка поставки на структуру, проверка внутреннего содержания файлов, загрузка поставки согласно внутренней структуре в СКВ (Систему контроля версий).

Поставка от ВР может приходить в виде исходного кода или набора бинарных файлов. Поставку с исходниками предварительно необходимо собрать и протестировать, а тут уже могут использоваться и собственные скрипты, и TFS, и maven, и т. д. и т. п. но это уже совсем другая история…

Так же каждый ВР присылает поставки в разном формате, так как нет жесткого регламента структуры поставки.

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

В качестве СКВ мы используем Git, SVN, CA Harvest (Зависит от конкретного проекта).

После недолгих раздумий и оценки парка ПО в качестве «кубиков» Автосборщика были взяты следующие компоненты:

  • Jira — Обеспечивает интерфейс пользователя.
  • SonicMQ — очередь для общения с Jira.
  • БД – База для хранения шаблонов «шагов» по сборке
  • .NET — язык разработки
  • TeamCity — Через TC происходит скачивание поставок (он единственный смотрит в Глобальную паутину. Безопасность ...)
  • PMD — в качестве инструмента проверки структуры файлов
  • HTML — Страница с отображением информации по сборкам

В Jira добавили несколько необходимых полей:

  • Путь до поставки — В данном поле через разделитель указывается список архивов для скачивания
  • Контур установки (DEV, TST, PROD) — в зависимости от типа контура список действий может отличаться
  • ВР(Поставщик)- это очередной флаг для инициализации набора «шагов» Автосборщика

Создали таблички в БД с параметрами и набором задач для каждого набора параметров "Проект + Поставщик + Контур":

— Каждый проект состоит из Процессов в определенной последовательности
— Каждая Процесс включает в себя набор параметров (жестко заданные в БД для проекта и вычисляемые)

В итоге процесс работы Автосборщика получился следующим:

image
  • Jira по кнопке формирует XML файл с параметрами задачи и отправляет его в Очередь
  • Сообщение из очереди вылавливает WinService и проводит первичный анализ (описана ли связка "Проект + Поставщик + Контур" в БД, все ли необходимые поля заполнены в задаче Jira)
  • Если все хорошо, то WinService запускает Автосборщик с параметрами.

Сам Автосборщик выполняет следующий пул процессов:

  • Работы, которые выполняем до поставок (Создание директорий, обновление репозитория ...).
  • Работы, которые выполняются с архивами (Проверка контрольных сумм архива, распаковка, копирование в необходимую структуру) — Данные задачи выполняются для каждого архива в цикле.
  • Работы, которые выполняем после архивов (проверка кодировки и структуры файлов, проверка структуры загрузка в СКВ).

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

На данный момент в системе описаны процессы следующих типов:

  • Работа с СКВ (Git, SVN, Harvest)
  • Процесс получения архива с FTP (Реализован с использованием REST API TeamCity)
  • Работа с архивом (На данный момент используется 7zip).
  • Работа с файлами и каталогами.
  • Проверка соответствия структуры поставки (PMD и другие).

Какой же Профит мы получили из всего этого:

  • Удалось разработать удобную структуру поставок и формирования имен файлов.
  • Исчезла необходимость в получении доступа во внешнюю сеть большому количеству пользователей. Теперь достаточно одной Доменной учётной записи.
  • Уменьшилось время на получение поставки и количество ошибок при приемке поставки.
  • Уменьшение количества скачиваний поставок.

Что планируется доработать:

  • доделать возможность работы Автосборщика в многопоточном режиме. Тут, правда, есть небольшие трудности — одновременно можно собирать только одну поставку для одного проекта.

P.S. Не знаю на сколько здесь нужны выдержки кода. В самих исходниках нет чего-то и необычного.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.