Мы продолжаем рассказывать о том, как внедряем практики и подходы DevOps. Например, недавно писали о создании собственного инструмента для проведения конкурентного анализа программных продуктов. Сегодня речь пойдет о том, как мы интегрировали систему TeamCity с внешним сервером отладочных символов.

Зачем это нужно


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

Такие символы решают несколько задач:

  • они содержат отладочную информацию о бинарном файле (имена переменных, функций и т.п.)
  • с их помощью легче искать ошибки в коде;
  • отладочные символы необходимы при поиске багов и разборе дампов.

Польза отладочных символов понятна, теперь поговорим о том, почему мы не стали использовать встроенный в TeamCity сервер символов и пришли к другому решению.

Что не так с сервером символов TeamCity


Наше решение использовать внешний сервер символов было продиктовано недостатками встроенного в TeamCity решения:

  • На момент, когда мы думали над тем, как именно работать с отладочными символами, встроенное решение TeamCity не умело взаимодействовать с бинарными файлами — позднее эта функция появилась, но мы уже приняли решение использовать внешний сервер.
  • Также там не было отлаженного механизма хранения символов.
  • В существовавшей у нас на тот момент конфигурации на сервере символов не было большого объёма дисковых ресурсов, нам просто не хватало места.
  • Наша компания занимается разработкой многокомпонентных продуктов, и хранить символы с привязкой к версии компонент для них было трудно.

Решение


Вот как мы решаем описанные проблемы сейчас:

  • используем виртуальный сервер с OS Windows Server;
  • основной рабочий инструмент — входящий в пакет Windows SDK Symstore.exe, который используется для выкладывания символов на сервер;
  • также мы написали отдельный метараннер для TeamCity.

У нас в компании реализована так называемая «релизная схема с продвижениями сборок», при которой протестированные артефакты сборок отдельных компонент перемещаются из «мусорного» .snapshot-репозитория в релизный — оттуда они в дальнейшем берутся для сборки релизных инсталляторов продуктов. Мы выкладываем символы релизных и фича-сборок на разные shared-серверы. Поэтому необходимо уметь отличать релизные сборки. Когда мы собираем обычную сборку, то бинарные файлы поступают в артифакторий, как и отладочные символы. При запуске продвижения сборки отдельной компоненты через специальную конфигурацию-промоутер, разработанный нами метараннер загружает символы в релизную папку на сервере символов.



Подробнее этот процесс выглядит так: когда происходит сборка, то мы смотрим на то, имеет ли он статус promote. Если мы имеем дело с такой сборкой, то символы помещаются в релизную расшаренную папку на сервере. Если же это обычная фича-сборка, то символы помещаются и в артифакторий, и в общую «разработческую» папку на сервере символов.



Что в итоге


В итоге на нашем сервере символов сейчас расположено два каталога:

  • Release Symbols — в нем лежать символы релизных сборок, которые нужно хранить долго;
  • Symbols — для символов девелоперских сборок.

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

Наш метараннер для TeamCity умеет работать со всеми бинарными файлами и встроен в процессы сборки многокомпонентных продуктов.

P. S. Рассказ о нашем опыте TeamCity и сервера символов был представлен в рамках DevOps-митапа, который состоялся осенью 2016 года в Москве.

Видео:



Слайды:



По ссылке представлены презентации 16 докладов, представленных в ходе мероприятия. Все презентации и видео выступлений добавлены в таблицу в конце этого топика-анонса.

Автор: Алексей Соловьев
Поделиться с друзьями
-->

Комментарии (0)