2013-07-08 4 views
42

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

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

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

+0

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

+0

Мое текущее решение состоит в том, чтобы всегда запускать шаг сборки «создать инсталлятор», но устанавливать такие настройки, чтобы сборка не прерывалась, если этот шаг завершился неудачно. Не идеально, но он обрабатывает мой текущий вариант использования (я не всегда создаю установщик). –

ответ

8

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

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

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

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

12

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

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

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

0

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

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

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

Я поднял это от TeamCity documentation here:

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