我们正在使用MSDeploy和Web部署项目来使用TFS Builds(TFS 2010和VS 2010)部署我们的网站项目。
TFS Build将构建的文件发送到指定drop文件夹的子文件夹,因此如果我将drop文件夹指定为:
\\计算机\构建
构建项目将被放入:
\\计算机\构建\ 1。测试\ 20120226.38 \部署
在该示例中,“1. Test”是TFS Build定义的名称,“20120226.38”是日期戳和内部版本号,“Deploy”是Web部署项目的名称。
当我在Deploy.wdproj文件中创建DeploySource项目组,并指定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'.
签出并手动更改内部版本号不是一个现实的选择。我觉得这里有一些简单的东西,但是我不能把手指放在它上面。
注意:这是一个网站项目,而不是一个Web应用程序项目。时间限制和黑盒供应商依赖关系不允许转换。
答案 0 :(得分:3)
如果在您的工作示例中您对构建编号进行了硬编码,则在调用命令之前存在构建输出文件夹,那么我猜这个问题很可能就是操作的顺序,这意味着你的文件夹在评估路径并运行MSDeploy时,$(BuildNumber)表示的ve不存在,而是在构建过程中稍后创建。
事实上,我敢打赌你需要使用另一个TFS变量来指示构建位置,如
$(OutDir)\_PublishedWebsites\Deploy