【问题标题】:TFS gated check in issueTFS 门控签入问题
【发布时间】:2012-06-11 04:50:57
【问题描述】:

我想知道是否应该在这里发布,但后来我在 TFS 上看到了其他类似的帖子,但它们并没有解决我的问题,所以我决定继续发布它。

我正在尝试修复一位前同事设置的 TFS 盒子。到目前为止,除了签入/签出文件之外,我还没有以任何其他身份使用过 TFS。出于本练习的目的,我创建了一个简单的 winforms 项目,其中只有一个表单和一个表单加载时的 hello world 警报,我是试图签入到 TFS。我们启用了门控签入,并且我们还禁止用户绕过构建验证,因为它可以在下面的红色框中突出显示。

现在的问题是所有门控签入尝试都失败并出现错误:

Access Denied: User 'myOrgDomain\user.name' needs Override check-in 
validation by build permission for the following build definition(s). DefnName

消息提示我说是部分成功

当我打开构建时,我看到了这个

当我在网上查看时,我发现解决方案是允许用户通过启用灰显的复选框来绕过验证。我不希望出现这种情况。有什么方法可以让绕过验证处于禁用状态,同时我的门控签到仍然有效?

这让我完全被难住了,我无法弄清楚可能出了什么问题。任何关于在我的日志中查看哪里以找出问题所在的指针也可能会有所帮助。日志确实表明构建成功,没有警告或错误。

【问题讨论】:

  • 看起来您有一个自定义的构建模板(我看到了指标生成),是不是构建定义被更改为在签入时不包含***NO_CI*** 注释?运行构建的服务帐户是否有权绕过签入验证?
  • 是的,我有一个定制的构建模板。不包括 NO_CI 评论?.. 当构建早期使用门控签入时,该评论曾经存在。这位同事离开后,当他的帐户被禁用时,我不得不在我的登录名下运行 TFS。那是整个问题开始的时候。我已经给了自己他给自己的所有特权;据我所知。
  • 我认为是自定义模板或您的帐户有问题。您可以尝试使用默认模板进行门控签入,看看是否可行?如果是这样,您基本上已经排除了权限问题。如果不是,您的帐户是否是您项目的“Builders”组的成员?
  • 默认模板也有同样的问题。我的帐户是 Builders 组的成员。我通过进入 TFS 管理控制台 > 团队项目集合 > 组成员资格 > 有效用户 > [TestProject]Builders 以及 [TestProject]Administrators 来检查这一点。事实上,我已经在项目集合管理员下添加了我的帐户......仍然是同样的问题。
  • 在构建定义的权限中,是否指定了构建定义的拒绝覆盖签入验证?还是只是空白?

标签: tfsbuild gated-checkin


【解决方案1】:

[TestProject]Builders、[TestProject]Administrators 和 [TestProject]Contributors,我已拒绝检查,对于 [TestProject]Readers,我将其设为空白..

由于拒绝会否决任何授权,并且由于几乎每个用户都是 Readers 或 Contributors 组的成员,因此您会遇到麻烦。由于用户只有在明确授予权限后才能绕过签入验证,因此无需设置任何拒绝规则。

所以要解决你的问题:

  • 从这些组中删除拒绝检查。
  • 设置“覆盖签入验证”以允许帐户应该能够绕过您的门控签入构建。

From the docs:

您可以为 Team Foundation Server 中的权限指定两个显式授权设置:拒绝和允许。还有一个隐式授权,既不将权限设置为允许也不将权限设置为拒绝。此授权是一种隐式拒绝设置,称为 Unset。

【讨论】:

  • [TestProject]Readers 没有用户。在 [TestProject]Administrators 和 [TestProject]Builders 下,我输入了我的帐户。在 [TestProject]Contributors 下,我输入了我将假定为正在签入代码的开发人员的帐户。
  • 我取消选中拒绝和允许除 [DefaultCollection]\Project 集合管理员之外的所有角色,这似乎对我有用.. 目前。您认为这应该没问题,还是我会做一些短视的事情,我真的需要检查“覆盖签入验证”选项?这样做将允许用户完全绕过门控签到功能,我不希望他们这样做..
  • 您始终可以在短时间内打开覆盖,例如在调试构建问题时。或者,您可以为项目管理员或可以承担责任的关键团队成员打开它。我们通常为大多数团队成员打开它,这样当他们签入实际构建未涵盖的文档或配置文件时,就不会导致构建排队。
【解决方案2】:

您的设置中发生了一些可疑的事情。对屏幕截图中显示的标志的访问由构建权限“通过构建覆盖签入验证”控制。由于它没有设置为权限,但显然设置为选项,因此您处于死锁状态。

我会尝试临时启用此标志(右键单击“构建”上的团队资源管理器,选择“安全”并为您的用户设置权限),然后复选框应该被启用并且我希望它被选中。我会手动取消选中该复选框并让构建运行。然后我会禁用该权限。
希望现在 VS 将保留此选项。

如果失败,我将在 MS 中提交错误。

【讨论】:

  • 谢谢。我试过了,但没有用。我启用了那个灰色但没有选择它的复选框,它构建成功。一旦我再次禁用绕过选项,它又回到部分成功。
  • 请详细说明“返回部分成功”:现在您的构建开始了吗?构建日志报告将构建降级为部分成功的原因是什么?
  • 好吧,我已经启用了门控签入,所以对于我制作的这个新测试项目,据我所知,我为此创建了一个新版本,当我尝试签入时,我会得到0 个错误,0 个代码警告。但是它会让我签入被拒绝,因为构建部分成功。构建已经运行,我可以看到在放置文件夹中生成的代码以及我的更改,但文件没有被签入。当我查看历史记录时,我所做的最后更改不在签入历史记录中。.跨度>
  • 只有当我的代码编译不正确时,门控签入才会失败?否则签到失败的原因是什么..?
  • 如果构建退出不成功并且可能由于多种原因而发生这种情况,其中之一是编译失败,则门控检查将失败。您可以检查构建日志以跟踪失败。
【解决方案3】:

我遇到了你提到的同样的问题。您要设置的安全设置是针对构建本身的,而不是针对 TFS 框上的任何内容。对我有用的是在 Visual Studio 中右键单击构建,然后选择 Security... 选项。然后,我确保我的构建服务帐户可以访问“覆盖构建时的签入验证”权限。这与允许 TFS 用户覆盖签入无关。该消息实际上是关于构建服务用户是否具有覆盖签入的能力。为此,您必须是 Project Collection Build Service Accounts 组的成员。

我想知道这是否会导致 TFS 每次都覆盖并签入(即使构建失败),所以我故意破坏了我的构建并使用此权限集进行了尝试。它不允许我继续签到(即适当地失败)。

就我而言,我有多个构建。对于我正在使用的解决方案,仅允许“在构建时覆盖签入验证”是不够的。出于某种原因,我必须对所有其他构建做同样的事情。我无法找到有关为什么会这样的文档。

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2011-07-24
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多