【问题标题】:TFS 2008 Continuous integration MSBUILD on Branch fails on Label分支上的 TFS 2008 持续集成 MSBUILD 在标签上失败
【发布时间】:2023-03-28 10:01:01
【问题描述】:

我正在尝试在我的一个 TFS 项目的分支上使用 CI。只有当我尝试使用分支时,MSBuild 才会失败。我将相同的 Build 指向“主干”项目,它工作正常。

我从构建日志收到的错误:

任务“标签”

标签 TeamFoundationServerUrl="http://TFSServer:8080/" BuildUri="vstfs:///Build/Build/6763" 名称="Test_SF_20090619.1" Scope="$/MyProject" 递归=真 Comments="Team Build 创建的标签" 版本="BuildServer3D143_66" Child="替换" 文件="$/" C:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets(812,5,812,5):

错误:在 $/ 中找不到匹配的项目 在您的工作区中。

已完成执行“标签”任务 -- FAILED。

在项目中完成构建目标“CoreLabel” “TFSBuild.proj”——失败。

我认为此错误是由于缺少复制到构建服务器的源文件造成的。

从构建日志中获取任务摘录:

任务“获取”

获取 TeamFoundationServerUrl="http://TFSServer:8080/" BuildUri="vstfs:///Build/Build/6768" 强制=真覆盖=假 PopulateOutput=False 预览=False 递归=真版本=“C204806” Workspace="BuildServer3D143_66"

完成执行任务“Get”。

这是一个完整的版本。 GET 中应该列出大约一千个文件。

一般信息

  • TFS 2008
  • Visual Studio 2008
  • 已建立构建服务器(已 运行去年的构建)
  • 被分支的项目是 ASP.NET web stie(2.0 框架)。

完整构建参数

  • /p:SkipClean=false
  • /p:SkipInitializeWorkspace=false
  • /p:ForceGet=true
  • /p:IncrementalBuild=false
  • /p:IncrementalGet=false

注意:我知道 IncrementalBuild 是多余的,但我只是想确定一下。

问题:

  • 从分支构建是否有限制?
  • 知道为什么 MSBuild 无法从分支工作区拉取文件吗?

【问题讨论】:

    标签: tfs msbuild continuous-integration


    【解决方案1】:

    如果是用于 CI,那么您很可能会执行增量获取。 TFS 只会费心获取它认为自上次获取以来已更改的文件 - 例如如果您从服务器中删除任何文件,它仍会认为您拥有这些文件,因此不会再次获取它们。在这种情况下,您需要在关闭增量属性的情况下运行一次构建,以便强制完全获取源代码。您可以通过在“队列构建”对话框中覆盖 MSBuild 命令行框中的属性来执行此操作:

    /p:IncrementalGet=false;ForceGet=true
    

    另一个想到的可能性是 Label 任务被您的分支混淆了。可能是您的工作区设置不正确,因此请检查您是否正在映射它需要的所有内容。

    【讨论】:

    • 我把我的构建参数放在上面。即使在添加 /p:IncrementalGet=false 之后,也没有运气。很可能是映射;但如果是这样,我不确定为什么。该 TFSProject 只映射了一个工作区。它位于根 $/MyProject。主干和分支都是该项目的子文件夹。我尝试将工作区映射专门添加到分支,但 TFS 只是将其作为重复映射删除。
    • 我怀疑这与分支的设置方式有关,但在这种情况下,我对 MSBuild 的了解还不够,无法提出更多我害怕的建议。
    【解决方案2】:

    在这种情况下我遇到了两个问题。

    首先,分支安全没有授予构建服务帐户的权限。我已将分支限制为我们团队的技术主管和发布工程师。构建服务帐户也需要访问权限。提示我的是在搜索互联网时,我偶然发现了一个犯同样错误的人posting

    第二个问题涉及更多。在清理我的构建项目文件时,我删除了以下部分。

    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../_stage/MyProject/MySolution.sln">
            <Targets></Targets>
            <Properties></Properties>
    </SolutionToBuild>
    

    这在我已经构建过至少一次的项目上运行良好,但如果这是一个新构建,没有将源文件复制到构建服务器,那么将没有文件并且构建会失败。

    你们中的一些人可能想知道我的其他构建是否也可以正常工作,毕竟他们没有旧的构建文件。是的,但我已经定义了完成我真正关心的所有工作的目标。所以SolutionToBuild 有点轻浮。

    【讨论】:

      猜你喜欢
      • 2017-06-30
      • 2023-03-08
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多