我正在尝试在我的一个TFS项目的分支上使用CI。当我尝试使用分支时,MSBuild只会失败。我在“主干”项目中指向相同的Build它工作正常。
我从构建日志收到的错误:
任务“标签”
Label TeamFoundationServerUrl =“http:// TFSServer:8080 /” BuildUri = “vstfs:///构建/建立/ 6763” NAME = “Test_SF_20090619.1” Scope =“$ / MyProject”Recursive = True 评论=“Team Build创建的标签” 版本= “BuildServer3D143_66” Child =“Replace”Files =“$ /”C:\ Program 文件\的MSBuild \微软\ VisualStudio的\ TeamBuild \ Microsoft.TeamFoundation.Build.targets(812,5,812,5):
错误:$ /中找不到匹配的商品 在你的工作区。
完成执行任务“标签” - 失败。
在项目中完成构建目标“CoreLabel” “TFSBuild.proj” - 失败。
我认为这个错误是由于缺少源文件被复制到Build服务器引起的。
从构建日志中获取任务摘录:
任务“获取”
获取TeamFoundationServerUrl =“http:// TFSServer:8080 /” BuildUri = “vstfs:///构建/编译/ 6768” Force = True Overwrite = False PopulateOutput = False Preview = False Recursive = True Version =“C204806” Workspace =“BuildServer3D143_66”
完成执行任务“获取”。
这是一个完整的版本。 GET中应该列出大约一千个文件。
一般信息
完整构建参数
注意:我知道IncrementalBuild是redundent但我只是想确定。
问题:
答案 0 :(得分:1)
如果是CI,那么你最有可能进行增量获取。 TFS只会费心去获取自上次获取以来认为已经改变的文件 - 例如如果您从服务器中删除任何文件,它仍然会认为您有这些文件,因此它不会再次获取它们。在这种情况下,您需要在关闭增量属性的情况下运行构建一次,以便强制完全获取源。您可以通过使用以下命令覆盖“队列构建”对话框中MSBuild命令行框中的属性来执行此操作:
/p:IncrementalGet=false;ForceGet=true
另一种可能的想法是,Label任务会被您的分支混淆。可能是您的工作区设置不正确,因此请检查您是否正在映射所需的所有内容。
答案 1 :(得分:0)
在这种情况下我有两个问题。
首先,分支机构安全性未授予构建服务帐户的权限。我把分支机构限制在我们团队的技术领导和发布工程师。构建服务帐户也需要访问权限。让我感到惊讶的是,在搜索互联网时,我偶然发现了posting犯了同样错误的人。
第二个问题涉及更多。清理我的构建项目文件时,我删除了以下部分。
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../_stage/MyProject/MySolution.sln">
<Targets></Targets>
<Properties></Properties>
</SolutionToBuild>
在我已经构建过至少一次的项目上工作正常,但如果这是一个新的构建,没有将源文件复制到构建服务器,那么就没有文件,构建会失败。
你们中的一些人可能想知道我的其他构建是否也在工作,毕竟他们不会有旧的构建文件。是的,但我确定了目标,完成了我真正关心的所有工作。所以SolutionToBuild有点儿了。