2013-09-18 5 views
7

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

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

Любой ключ?

ответ

6

Там в переменной окружения Thats подвергается в TeamCity, что могу вам сказать, является ли это личный билд BUILD_IS_PERSONAL:

См http://confluence.jetbrains.com/display/TCD7/Predefined+Build+Parameters

Э.Г. с помощью MSBuild бегуна (вам просто нужно указать путь NuGet)

<Project DefaultTargets="Pack" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <Target Name="Pack" Condition="$(BUILD_IS_PERSONAL)!='True'"> 
    <Message Text="Personal: $(BUILD_IS_PERSONAL)"/> 
    <Exec Command="$(NUGETPATH)\nuget pack $(NugetProject)"/> 
    </Target> 
</Project> 

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

Добавьте дополнительный шаг сборки, который использует powershell-

if (([environment]::GetEnvironmentVariable("BUILD_IS_PERSONAL","Process")) -eq "True") 
{ 
    throw 
} 

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

+0

Так плохо, что бегуны по умолчанию не используют это, чтобы предотвратите выполнение шага. – Kralizek

+0

Я думаю, что это лучший способ. Они могли бы добавить эту опцию в «Execute step if» dropdown :( – Kralizek

0

Вы можете создать новую конфигурацию сборки, оставив эти 2 шага. Затем - установите плагин TeamCity Visual Studio (при условии, что вы используете VS), а затем запустите личную сборку, выбрав конфигурацию сборки, которую хотите использовать.

+0

Это решение может работать, если у меня было только несколько конфигураций с этой проблемой.Unlucky У меня есть шаблон, используемый примерно для 40 различных конфигураций, и довольно сложно иметь в два раза больше конфигураций :(Кроме того, я бы потерял статистику для реальной конфигурации – Kralizek

0

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

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

TeamCity packaging/deployment build trigger

Таким образом, вы всегда вызывая ту же самую конфигурацию сборки для компиляции, будьте то с помощью разработчиков на VS, используя AddIn или Release Team с помощью веб-интерфейса

Надеется, что это помогает

+0

Хорошая идея, но вряд ли применима в моем случае, так как у нас есть 40 + пакетов. .. – Kralizek

0

У нас есть аналогичная проблема, когда мы только хотели построить и развернуть наш локальный репозиторий Apache Maven, когда он изменился.

Одно из возможных решений: если ваш шаг сборки - Командная строка (или может быть), создайте крошечный сценарий оболочки, чтобы решить, должен ли выполняться этот шаг или нет.

Смежные вопросы