Могу ли я переопределить цель DropLocation, чтобы избежать задержки в сети? - PullRequest
0 голосов
/ 24 ноября 2008

В Team Build 2008 местоположение удаления для сборки больше не указывается в файле .proj, а вместо этого сохраняется в базе данных и поддерживается в инструменте GUI.

Инструмент с графическим интерфейсом принимает сетевой путь только как местоположение отбрасывания (т. Е. \\ сервер \ общий ресурс) и не принимает локальный путь.

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

Ответы [ 3 ]

0 голосов
/ 09 декабря 2008

Я нашел более простое решение, это просто сделать файловую систему move в папке Release. Так как место сброса на самом деле находится на том же физическом диске, я в порядке с этим. Я добавил это в файл TFSBuild.proj:

<Target Name="CoreDropBuild"
        Condition=" '$(SkipDropBuild)'!='true' and '$(IsDesktopBuild)'!='true' "
        DependsOnTargets="$(CoreDropBuildDependsOn)" >
    <Exec Command="move $(BinariesRoot)\Release d:\BuildOutput\$(BuildNumber)\Release"/>
</Target>
0 голосов
/ 08 августа 2009

Фактическое BuildDropLocation должно быть доступно на общем сетевом ресурсе. Расположение публикации используется клиентами и уровнем приложений TFS при публикации результатов тестирования. Он также должен быть доступен как клиентам, так и компьютеру уровня приложений TFS при доступе к результатам сборки. В рамках этапа хранилища данных компьютер TFS Application Tier получит доступ к результатам компоновки через местоположение отбрасывания, чтобы найти файлы результатов теста для добавления в хранилище.

Тем не менее, при условии, что ваш сервер сборки является той же машиной , на которой размещен ваш общий ресурс для размещения размещения, и он всегда будет одним и тем же компьютером, тогда вы можете пропустить шаг удаления из TFSBuild.proj. Одним из решений, вероятно, было бы сочетание тех, которые обозначены Тодд и Чад , т.е. что-то вроде:

<SkipDropBuild>true</SkipDropBuild>
<Target Name ="AfterDropBuild">
        <Exec Command="move $(BinariesRoot)\Release d:\BuildOutput\$(BuildNumber)\Release"/>
</Target>

Обратите внимание, что на самом деле вам не нужно жестко кодировать часть «Релиз», а иметь возможность получить ее из свойств конфигурации - однако у меня нет файла моих целей TeamBuild, поэтому я не могу точно сказать, что это в данный момент, поэтому я посмотрю его, когда вернусь к своему столу, и соответствующим образом отредактирую этот ответ.

Тем не менее, при этом существует довольно много рисков.

  1. Вы должны убедиться, что все пути к файлам выстроены точно правильно или что такие вещи, как просмотр журнала сборки или заполнение хранилища TFS результатами теста, могут перестать работать
  2. Вы будете жестко закодировать места сборки и сброса, чтобы всегда существовать на одной машине. Если кто-то попытается скомпоновать ваш файл TFSBuild.proj на другом компьютере, то все будет работать не так, как он ожидал
  3. Если кто-то редактирует свойство местоположения отбрасывания в определении сборки, он должен знать, чтобы сделать соответствующее изменение в файле TFSBuild.proj

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

0 голосов
/ 04 декабря 2008

Я не работал с версией 2008 года, только с версией 2005 года, но, кажется, вы могли бы сделать это вручную. Установите для свойства SkipDropBuild значение true. Затем скопируйте все двоичные файлы вручную в событие BeforeDropBuild с помощью команды «Копировать», встроенной в Team Build.

Примерно так:

<SourceDir>$(SolutionRoot)\..\Binaries\Release</SourceDir>
<SkipDropBuild>true</SkipDropBuild>
<CreateItem Include="$(SourceDir)\**\*.*">
        <Output TaskParameter="Include" ItemName="BuiltBinaries"/>
</CreateItem>
<Target Name ="BeforeDropBuild">
        <Copy SourceFiles="@(BuiltBinaries)" DestinationFiles="@(BuiltBinaries->'C:\droplocation\%(Filename)%(Extension)')"/>
</Target>
...