Как параметризировать требования агента в TeamCity

Возможно ли в TeamCity параметризовать требования агента на основе параметров конфигурации проекта или сборки? Например, значение может включать в себя %...% замены?

Пример: у нас есть параметры проекта env.XXX_VERSION которая указывает необходимую версию продукта XXX во всех конфигурациях сборки проекта. Затем мы можем использовать это значение в соответствующих сценариях сборки проекта. (Со временем мы создаем копии этого проекта сборки для различных вариантов некоторых продуктов, от которых мы зависим, поэтому у нас теперь есть 12 различных проектов с разными значениями параметров). Теперь я также хотел бы включить требование агента из всех соответствующих конфигураций сборки в проект, чтобы рассматривать только используемые агенты. Но учитывая количество конфигураций сборки и количество вариантов проектов, я бы предпочел параметризовать требование о значении выхода env.XXX_VERSION, Это возможно?

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

3 ответа

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

Почему бы не автоматизировать это с помощью REST API TeamCity? Сервер TeamCity имеет встроенный HTTP API, который вы можете использовать для редактирования / обновления (почти) любых полей, которые вы можете использовать с помощью веб-интерфейса.

Вы можете взаимодействовать с API, используя предпочитаемый вами язык сценариев, используя вызовы HTTP GET/PUT для получения и обновления значений. В этом случае, я думаю, что стоит потратить время на написание сценария, чтобы избежать необходимости проходить через пользовательский интерфейс для обновления всех конфигураций сборки, которые вы упомянули.

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

  1. Перебирайте проекты в TeamCity

Получить список проектов

curl -i -H "Accept: application/json" http://teamcity/httpAuth/app/rest/projects --user username:password
  1. Получить XXX_VERSION параметр из проектов.

Переберите все проекты, получите все параметры и проанализируйте нашу XXX_VERSION

curl http://teamcity/app/rest/projects/id:PROJECT_NAME/parameters
  1. Задайте требование агента в конфигурациях сборки.

Для каждой конфигурации сборки в каждом проекте задайте требования агента к конфигурации сборки, используя проанализированное значение XX_VERSION

curl -X PUT http://teamcity/httpAuth/app/rest/buildTypes/<buildTypeLocator>/agent-requirements/<id> --user username:password

Это общая идея, но не полная, потратив время на то, чтобы избавиться от этого сценария, вы сэкономите много времени на управлении им с помощью TeamCity UI.

https://confluence.jetbrains.com/display/TCD9/REST+API

Вы можете принудительно настроить TeamCity на конкретном агенте, не отключая все остальные подключенные агенты.

Вот как:

Перейти к настройкам конфигурации сборки

Требования к следующему агенту

Теперь вам нужно установить явное требование для конкретного агента:

Имя параметра: system.agent.name

Состояние: равно

Значение: YOUR_SPECIFIC_AGENT_NAME

Также вы можете попробовать это:

Просмотрите: TeamCity -> Администрирование -> Агенты -> Выберите агент -> вкладка "Совместимые конфигурации", затем " Политика конфигурации текущего запуска", затем " Запустите только назначенные конфигурации" и нажмите " + Назначить конфигурации и завершите".

Пожалуйста, дайте мне знать, если это поможет.

Спасибо.

Я не мог найти способ параметризации значения с %...% замены, но я нашел обходной путь. Это не идеально, но это работает для моего небольшого варианта использования.

Вариант использования: я создаю конфигурации сборки из шаблона и мне нужно, чтобы каждая конфигурация сборки работала только на одном конкретном компьютере. Я хотел сделать teamcity.agent.name equals %buildAgentName% в шаблоне, чтобы TeamCity попросил меня указать параметр при создании конфигурации сборки из шаблона.

Решение: вместо того, чтобы использовать параметр, я просто помещаю строку, которая не соответствует ни одному из имен агентов, например teamcity.agent.name equals replaceThisWithActualAgentName в шаблоне. У меня не запрашивается параметр, но это предотвращает случайный запуск конфигурации сборки на неправильном компьютере, пока я не переопределю требование агента.

Я не уверен, что это решает ваш вариант использования, но я публикую его здесь на тот случай, если это будет полезно для кого-то другого.

Другие вопросы по тегам