作为自动构建的一部分,我清除了一个目录,并将最新版本的源文件复制到该目录中。首先,我设置了我要复制的文件列表:
<CreateItem
Include="\\BuildServer\Build_Temp\SomeRootDirectory\**\*">
<Output
TaskParameter ="Include"
ItemName ="FilesToCopy"/>
</CreateItem>
让我的系统知道我的QA服务器所在的位置:
<CreateProperty
Value="\\QAWebServer\Websites\MySite">
<Output
TaskParameter="Value"
PropertyName ="MyDropLocation"/>
</CreateProperty>
然后我删除并重新创建目标服务器上的目录以清除所有文件(这是一个烧焦的地球构建,以确保我们不会意外地将文件保留在我们的网络目录中不属于源代码控制的一部分。)
<RemoveDir Directories="\\QAWebServer\Websites\MySite" />
<MakeDir Directories="\\QAWebServer\Websites\MySite" />
最后,我执行了一个复制任务:
<Copy
SourceFiles="@(FilesToCopy)"
DestinationFiles="@(FilesToCopy->'$(MyDropLocation)\%(RecursiveDir)%(Filename)%(Extension)')"
OverwriteReadOnlyFiles="True"/>
然后我尝试复制文件时得到结果错误。有趣的是,有些人会这样做而有些人却没有(在这种情况下,它看起来几乎只是我上面创建的目录根目录中的那些):
C:\Build_Temp\QABuild\BuildType\TFSBuild.proj(690,3): error MSB3021: Unable to copy file "\\BuildServer\Build_Temp\SomeRootDirectory\Import.swf" to "\\QAWebServer\Websites\MySite\Import.swf". Access to the path '\\QAWebServer\Websites\MySite\Import.swf' is denied.
C:\Build_Temp\QABuild\BuildType\TFSBuild.proj(690,3): error MSB3021: Unable to copy file "\\BuildServer\Build_Temp\SomeRootDirectory\Incomplete.swf" to "\\QAWebServer\Websites\MySite\Incomplete.swf". Access to the path '\\QAWebServer\Websites\MySite\Incomplete.swf' is denied.
C:\Build_Temp\QABuild\BuildType\TFSBuild.proj(690,3): error MSB3021: Unable to copy file "\\BuildServer\Build_Temp\SomeRootDirectory\Index.html" to "\\QAWebServer\Websites\MySite\Index.html". Access to the path '\\QAWebServer\Websites\MySite\Index.html' is denied.
我已经验证了对文件系统的访问权限(Everyone有权访问创建/修改/等),并且将文件添加到\ QAWebServer \ Websites \ MySite上的子目录结构没有问题,只是(primarilly)到根。
答案 0 :(得分:1)
我们最终必须通过切换到XCopy任务来解决这个问题。
<Exec Command="xcopy /E /R /Y \\buildMachine\Build_Temp\BuildSource
\\QAWebServer\Websites\MySite"/>