Подтвердить что ты не робот

Условно выполнить шаг сборки TeamCity

Я работаю над определением шаблона построения общего назначения для всех наших проектов, который я разместил на уровне "корневого проекта" (благодаря этой новой функции TeamCity 8). Некоторые из наших проектов создают установщик, который должен быть сгенерирован отдельным "шагом сборки", который запускает powershell script. Однако некоторые из наших проектов не создают этот установщик и, следовательно, не нуждаются в этом дополнительном шаге сборки.

Есть ли способ условно выполнить шаг сборки, основанный на параметре построения? Я подумал, что, возможно, здесь может быть задействована функция "отключить сборку", но я не вижу способа определить статус включения/отключения шага с помощью параметра.

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

4b9b3361

Ответ 1

Мне приходилось часто выполнять условные шаги сборки, но, увы, эта функция не существует на данный момент. http://youtrack.jetbrains.com/issue/TW-17939

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

Не такой аккуратный, как наличие встроенного/динамического метода, встроенного в TC, но я иногда использую его. Я тоже сделал предложение.

Ответ 2

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

Итак, вам нужно предоставить настраиваемый параметр сборки системы для вашего генератора powershell, который будет работать как system.Generate, который должен быть bool (вы можете сделать его скрытым, пригласить, получить его значение на основе параметра конфигурации, и т.д.), а затем в вашем листе powershell добавьте следующее:

param([int]$Generate)
if ($Generate) {
  Write-Host "generating installer..."
   # call your func()
} else {
   Write-Host "skip installer"
}

В вашей конфигурации runner добавьте -Generate% system.Generate% в качестве аргумента script (осторожный, а не дополнительный аргумент команды!). % system.Generate% следует развернуть до 1 или 0 в зависимости от его значения времени выполнения.

Ответ 3

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

Итак, в вашем случае вы включили бы шаг сборки "установщик" на корневом уровне, но отключите его для любых проектов, которые наследуют этот шаблон и не имеют установщика.

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

Я взял это из документации TeamCity здесь:

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