1

我的公司使用 Visual Studio Team Services(以前称为 Visual Studio Online,Team Foundation Service)。作为一名开发人员,我使用 git-tf 来完成我的 Git 工作。为了应用持续集成,我让 Jenkins 运行,它使用使用Team Explorer Everywhere CLC的插件从 Team Services 获取代码。

最近在提交到 Team Services 期间,出现了以下消息:

gottfried@lubuntu-virtual-machine:~/git_repo$ git-tf checkin

签入 $/fireAnalytics: 12%, commit a0bfea1
git-tf: 由于以下错误,未能挂起对 TFS 的更改。请修复错误并重试签入。 TF10151:无法锁定项目 $/fireAnalytics/packages/fdssuite/src/fdssuite/tests/couch_devices.png 以进行签出。项目 $/fireAnalytics/packages/fdssuite/src/fdssuite/tests/couch_devices.png 由 Sascha Gottfried 在工作区 Hudson-hhpberlin fireanalytics-MASTER 中签出。

提到的工作区(workspace Hudson-hhpberlin fireanalytics-MASTER)是由 Jenkins CI 服务器创建的(带有 TFS 插件使用 TEE-CLC)。提到的文件是在运行集成测试的构建步骤期间创建的,并且不受版本控制。

工作区设置为使用 TFS 插件选项“使用更新”。引用自文档

如果选中此选项,则在构建结束时不会删除工作区和工作文件夹。这使得构建速度更快,但工件仍然存在于构建之间。如果不勾选,插件会在构建开始时创建一个工作区并映射到本地文件夹,然后在构建结束时删除工作区。

我的 CI 设置如何影响 TFS 签入以及如何解决这种情况?

4

2 回答 2

2

二进制文件仅由 TFS 签出,因为无法合并对文件所做的任何更改。看起来您已经在您的名字的工作区中签出了此文件。您需要在另一个工作区中撤消该签出(或至少撤消锁定)。您可以从源代码管理资源管理器或命令行执行此操作。

从标准命令行你会发出

tf undo /workspace:"Hudson-hhpberlin fireanalytics-MASTER";"Sascha Gottfried" "$/fireAnalytics/packages/fdssuite/src/fdssuite/tests/couch_devices.png"

我怀疑 CLC 命令行会非常相似(但我目前没有它可供检查)。

使用构建帐户时,将其配置为执行非排他性签出并确保在构建失败时(在门控签入的情况下)释放锁定的文件可能更安全。这些类型的情况经常发生在构建 latest+shelveset 的 Gated Checkins 上,但由于某种原因失败,导致搁置集中的文件被签出。如果是二进制文件,这些签出将是独占的。

您还可以将 TFS 配置为从不以独占方式检出二进制文件。在 Visual Studio 中,您可以在Team> Team Foundation Server Settings>下找到这些设置Source Control File Types

于 2014-01-17T15:54:39.010 回答
0

显然 Jenkins CI 服务器在我的 TFS 提交期间触发了一个新构建,因为 Jenkins 作业设置为每分钟轮询 TFS 存储库。我暂时关闭了 Jenkins CI,TFS 提交再次成功。

于 2014-03-03T21:13:45.403 回答