DevOps (Development + Operations) |
Частично вопросы организации процессов сборки и тестирования уже были рассмотрены в статье "TeamCity triggers & dependencies: построение процессов разработки и тестирования". В статье ниже приведена терминология основных понятий, используемых при описании конфигураций, рекомендуемый набор конфигураций для произвольного проекта, а также схема взаимодействия конфигураций для релизных и нерелизных сборок, деплоя, функционального тестирования.
Терминология CI-процессов в TeamCity
Дадим определения основных понятий TeamCity, используемых при описании CI-процессов на различных проектах:
Типичная схема взаимосвязи конфигураций
Схема взаимодействия конфигураций укладывается в цепочку: Build - Deploy - Testing - PromotionОбобщенная иерархия конфигураций
Рекомендуемая обобщенная иерархия для всех проектов в TeamCity включает в себя следующие конфигурации:
<ROOT project> - головной проект, содержащий все другие проекты. Используется для объявления глобальных переменных, шаблонов и мета-раннеров необходимых на всех проектах. С ним работает только команда DevOps.
- <Название проекта> - общее имя проекта, над которым работает команда. Содержит в себе все подпроекты, относящиеся к сборке, деплою и тестированию.
<Название подпроекта> - имена подпроектов, в случае, если разрабатываемый продукт состоит из нескольких отдельных частей или модулей. - Builds - все сборочные конфигурации должны размещаться здесь. Они также могут быть разбиты на подпроекты, в случае, если требуется кросс-сборка проекта под различные ОС.
- Developer's builds - только девелоперские сборки из нерелизных веток:
- <Префикс имени собираемого (под)-модуля> builder CI INFO <возможный постфикс с дополнительной информацией: разрядность, ОС и т. п.> - имя сборщика для информационных нерелизных билдов.Например: ProjectName CI INFO builder - win32.
- <Префикс имени собираемого (под)-модуля> builder <возможный постфикс с дополнительной информацией: разрядность, ОС и т. п.> - имя сборщика для нерелизных билдов, который создаёт артефакт и выкладывает его в репозиторий Артифактория.Например: ProjectName builder - win32.
- Release builds - только автоматически собираемые релизные ветки:
- <Префикс имени собираемого (под)-модуля> release builder <постфикс дополнительной информации: разрядность, ОС и т.п.> - имя сборщика для релиз-кандидатов, которые затем автоматически деплоятся и тестируются при помощи авто-тестов из группы релизных тестов.
Например: ProjectName release builder - win32.
Здесь же могут находиться конфигурации-промоутеры, если они выделены отдельно для проекта. Формат имени для таких конфигураций: <Префикс имени собираемого (под)-модуля> build promouterНапример: ProjectName build promouter. - Deploy - здесь должны храниться все деплойные конфигурации, которые предназначены для установки и настройки сборки продукта на тестовом стенде. Они также могут быть разбиты на подпроекты. Формат имени для таких конфигураций: <Префикс имени (под)-модуля> deploy runnerНапример: ProjectName deploy runner.
Здесь же могут располагаться конфигурации-индикаторы корректности деплоя на тестовых стендах, проверки запущенных сервисов и т. п.Например: ProjectName services start indicator, ProjectName deploy indicator. - Tests - здесь содержатся билд-конфигурации для всех видов функциональных, интеграционных и нагрузочных тестов.
На имена тест-раннеров нет ограничений, главное, чтобы они отражали суть запускаемых тестов.Например: BVT, Test case runner, Test Suite runner, Load runner и т.д.
Тестовые конфигурации, которые запускают другие конфигурации, должны содержать префикс Runner.Например: Runner: All functional testsuites for ProjectName. - Release tests - в этом подпроекте должны содержаться тест-раннеры для тех наборов тестов, которые QA-группа выделила для автоматической проверки релиз-кандидатов сборок и деплоя.Например: Release Smoke-tests.
Следующие подпроекты для тестов создавать не обязательно, только если вы хотите сгруппировать в них множества конфигураций: - Functional testing - возможное имя подпроекта для тест-раннеров функциональных тестов.
- Load testing - возможное имя подпроекта для тест-раннеров нагрузочных тестов.
- UI testing - возможное имя подпроекта для тест-раннеров тестов интерфейса.
- Tools - здесь должы содержаться раннеры для всевозможных вспомогательных инструментов: запуск произвольных скриптов по расписанию, анализ данных по некоторому алгоритму, инструменты для сравнения отчетов и т. п.Например: Scanning tool, Diff models, Checking parameters.
- Competitive Analysis - здесь могут размещаться билд-конфигурации для проведения конкурентного анализа и сравнения с другими продуктами. Это необязательная группа подпроектов.Например: Compare ProjectName with Product_XXX.
Проект, построенный согласно предложенной схеме, в TeamCity будет выглядеть примерно следующим образом:
Различные проекты, разумеется, могут содержать лишь некоторые из предлагаемых конфигураций. Организация конфигураций согласно указанной выше схеме подходит для большинства типичных проектов. Кроме того, она достаточно гибкая и расширяемая, в том числе для нестандартных проектов. А благодаря унификации схемы Build - Deploy - Testing - Promotion для всех проектов, отделу DevOps гораздо легче поддерживать и разрабатывать такие конфигурации.