2012-02-27 1 views
1

Мы используем MSDeploy с проектом веб-развертывания для развертывания нашего проекта веб-сайта с использованием TFS Builds (TFS 2010 и VS 2010).MSDeploy не принимает динамический путь для назначения развертывания

TFS сборки отправляет встроенные файлы в подпапку в указанной папке капли, так что если я указать папку для как:

\\machineName\Builds

Проект сборки упал в:

\\machineName\Builds\1. Test\20120226.38\Deploy

В этом примере «1. Тест» - это имя определения сборки TFS, «20120226.38» - это дата-штамп и номер сборки, а «Развертывание» - это название проекта веб-развертывания.

Когда я создаю свою группу элементов DeploySource в файле Deploy.wdproj и задаю точный путь для источника MSDeploy (см. Ниже), все в порядке. Пример:

 
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Test|AnyCPU' "> 
    <DeploySource Include="DirPath"> 
     <Path>C:\Builds\1. Test\20120226.39\_PublishedWebsites\Deploy</Path> 
     <ComputerName>machineName</ComputerName> 
     <UserName>$(UserName)</UserName> 
     <Password>$(Password)</Password> 
    </DeploySource> 
</ItemGroup> 

Для учета ряда изменение сборки и даты, Я added a $(BuildNumber) variable via the DefaultTemplate.xaml file. Итак, вот тонко измененный пример:

 
<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Test|AnyCPU' "> 
    <DeploySource Include="DirPath"> 
     <Path>C:\Builds\1. Test\$(BuildNumber)\_PublishedWebsites\Deploy</Path> 
     <ComputerName>machineName</ComputerName> 
     <UserName>$(UserName)</UserName> 
     <Password>$(Password)</Password> 
    </DeploySource> 
</ItemGroup> 

И они прошли в этот MSDeploy вызов:

 
<MSDeploy Condition=" '$(Configuration)|$(Platform)' == 'Test|AnyCPU' " 
    Whatif="$(WhatIf)" 
    Verb="sync" 
    Source="@(DeploySource)" 
    Destination="@(DeployDest0)" 
    ExePath="$(MSDeployPath)" 
/> 

Вот моя проблема:

С примера 1 выше, все в порядке, и сайт сборки разворачивается в нужное место.

С примером 2 выше, я получаю следующее сообщение об ошибке:

 
MSDEPLOY: Object of type 'dirPath' and path '\\machineName\Builds\1. Test\20120227.2\_PublishedWebsites\Deploy' cannot be created. 
MSDEPLOY: (2/27/2012 6:54:14 PM) An error occurred when the request was processed on the remote computer. 
MSDEPLOY: Object of type 'dirPath' and path '\\machineName\Builds\1. Test\20120227.2\_PublishedWebsites\Deploy' cannot be created. 
MSDEPLOY: Could not find directory '\\machineName\Builds\1. Test\20120227.2\_PublishedWebsites\Deploy'. 
MSDEPLOY: Could not find a part of the path '\\?\UNC\machineName\Builds\1. Test\20120227.2\_PublishedWebsites\Deploy'. 

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

Примечание. Это проект веб-сайта, а не проект веб-приложения. Ограничения времени и зависимости поставщика черного ящика не позволят преобразовать.

+0

Вопрос: В вашем рабочем примере, где вы жестко закодированной номер сборки, является то, что в пре- существующая сборка, где папка существовала до вашего вызова команды? Если да, то я предполагаю, что проблема, скорее всего, в порядке операций, то есть папка, которую вы указали с помощью $ (BuildNumber), не существует, когда путь оценивается и MSDeploy запускается, но вместо этого создается позже процесс сборки. –

+0

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

+0

Вы пробовали использовать $ (OutDir), как мне подсказывает мой ответ? –

ответ

3

Если в вашем рабочем примере, где у вас есть жестко закодированный номер сборки, вы создаете выходную папку до вашего вызова команды, тогда я думаю, что проблема, скорее всего, в порядке операций, то есть в папке, которую вы Указанный с помощью $ (BuildNumber) не существует, когда путь оценивается и MSDeploy запускается, но вместо этого создается позже в процессе сборки.
На самом деле, я уверен, вы должны использовать другую переменную TFS, чтобы указать местоположение сборки как

$(OutDir)\_PublishedWebsites\Deploy 
+0

Я чувствую себя глупо, я просто понял, что OutDir позволит мне разворачиваться с сервера сборки, а не из места перетаскивания.Я не могу развернуть его из папки, если у меня нет файла XAML (я думаю). Если я правильно пойду, это сработает. Мне может просто понадобиться путать пути, прежде чем я отмечу это как ответ. Спасибо, Ник! –

+0

, честно говоря, я удивлен, что $ (OutDir) не работал, так как я считаю, что это не то же самое, что и конечное место для копирования. TFS2010 использует рабочий процесс для выполнения задач pre & post build, поэтому копия на общий ресурс происходит в CodeActivity после завершения MSBuild. Другим вариантом может быть использование $ (BinariesRoot) (ознакомьтесь с этой статьей MSDN о свойствах сборки TFS http://msdn.microsoft.com/en-us/library/aa337598.aspx) –

+0

Еще раз спасибо Ник, я сгладил все перегибы. –

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