2

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

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

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

3 ответа3

2

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

Почему бы не автоматизировать это с помощью TeamCity REST API? Сервер 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

0

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

Вот как:

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

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

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

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

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

Значение: YOUR_SPECIFIC_AGENT_NAME

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

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

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

Спасибо.

-1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .