MSDeploy不接受部署目标的动态路径

时间:2012-02-27 23:33:57

标签: tfs tfsbuild msdeploy team-build web-deployment-project

我们正在使用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应用程序项目。时间限制和黑盒供应商依赖关系不允许转换。

1 个答案:

答案 0 :(得分:3)

如果在您的工作示例中您对构建编号进行了硬编码,则在调用命令之前存在构建输出文件夹,那么我猜这个问题很可能就是操作的顺序,这意味着你的文件夹在评估路径并运行MSDeploy时,$(BuildNumber)表示的ve不存在,而是在构建过程中稍后创建。
事实上,我敢打赌你需要使用另一个TFS变量来指示构建位置,如

 $(OutDir)\_PublishedWebsites\Deploy