#tfs #build-automation #tfsbuild #build
Вопрос:
Как бы вы вручную запустили дополнительные сборки команды из командной сборки? Например, когда мы были в CC.Net другие сборки запускались бы, если бы определенные сборки были успешными. Вторая сборка может быть либо проектами, использующими этот компонент, либо дополнительными, давно работающими тестовыми библиотеками для того же компонента.
Ответ №1:
Один из способов, которым вы могли бы это сделать, — это добавить цель AfterEndToEndIteration в ваш файл TFSBuild.proj, который запускает TfsBuild.exe командная строка для запуска других сборок. Я думаю о чем-то подобном (хотя я еще не проверял это).
<Target Name="AfterEndToEndIteration">
<GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Condition=" '$(IsDesktopBuild)' != 'true' ">
<Output TaskParameter="Status" PropertyName="Status" />
</GetBuildProperties>
<Exec Condition=" '$(Status)'=='Succeeded' "
Command="TfsBuild.exe start /server:$(TeamFoundationServerUrl) /buildDefinition:amp;quot;Your Build Definition To Runamp;quot;" />
</Target>
Ответ №2:
Я несколько раз делал то же самое, что предлагал Мартин (кстати, его блог не только полезен). Однако в итоге мне потребовалось запустить каскадные сборки, подобные этой (на основе некоторых других сложных правил), достаточно, чтобы я создал для этого пользовательскую задачу. Сохраняйте свои сценарии сборки красивыми и удобными, что дает вам больше гибкости и возможностей для инкапсуляции.
public override bool Execute()
{
IBuildDefinition[] buildDefinitions = BuildServer.QueryBuildDefinitions(ProjectName);
foreach (IBuildDefinition build in buildDefinitions)
{
if(build.Enabled) //I did a bunch of custom rules here
{
Log.LogMessage(String.Concat("Queuing build: ", build.Name));
BuildServer.QueueBuild(build);
}
}
return true;
}
В блоге Аарона Халльберга тоже есть еще кое-что хорошее:
http://blogs.msdn.com/aaronhallberg/archive/2007/04/24/team-build-object-model-queueing-a-build.aspx