Build Agent的分支机构政策豁免无效

时间:2018-06-27 13:36:33

标签: git azure-devops tfsbuild azure-pipelines tfs2017

作为TFS 2017 R2 CI构建定义的一部分,我试图将提交从一个分支合并到另一个分支。如果您可以想象在测试环境中添加了一个错误修正,那么作为build def的一部分,我运行一些git命令。

分支机构已启用策略,这些策略本质上需要提交请求的拉取请求。为了使此流程正常运行,我需要将构建代理从分支策略中排除。

我的构建def是一个单独的Powershell脚本,该脚本运行“ whoami”,然后进行git merge和git push。 Whoami返回一个用户:

domain\adminAccount

管理员帐户具有以下权限属性:

  • 收集级别:服务帐户组的成员
  • 团队项目级别:服务帐户组是Build Administrators组的成员
  • 存储库级别:“构建管理员”组的“免于执行策略”权限设置为允许。
  • 个人级别:如果我添加此用户并跟踪其“免于执行策略”权限,则它们显示“继承的允许”。参见下图。

Permissions Trace

但是,当我尝试将提交推送到分支时,出现TFS错误:

TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.

如果这些帐户权限正确,并且在我执行这些脚本时它们显示该帐户已被使用,我会丢失什么?是否有一些黑匣子逻辑关于实际上正在执行什么帐户,我需要从政策执行中免除该费用?

2 个答案:

答案 0 :(得分:1)

您自己的帐户获得“免于执行策略执行setbas Allowed”的许可后,这意味着您已经具有直接推送到受保护分支的许可。

唯一需要注意的是构建代理程序应以domain\user 的身份登录,作为您登录TFS的用户帐户:

enter image description here

更改登录帐户后,应重新启动代理服务并重新构建。

答案 1 :(得分:1)

刘海娜(Marina Liu)-如果我说的不正确,请让我知道,您的回答可能会对其他人有所帮助!

有关此问题的解决方法的一些说明:

  • PowerShell脚本/构建代理正在执行的用户是一条非常无用的信息。相反,您想使用命令“ git config user.name”来查看正在使用的 git凭据
  • 原因是,无论哪个用户正在执行构建脚本,构建过程都将使用用户的git凭据(在Ctrl Panel中的凭据管理器中查看)“仅是最近的” git凭证。在我们的示例中,该用户也是Build Agent VM上的管理员,也是
  • 我的直觉是,通过拦截git命令,查看git凭据,然后尝试将其与AD帐户相关联,然后检查策略豁免,可以在TFS中实施分支策略。
  • 最后,请仔细检查正在代理上执行构建过程的任何帐户的组成员身份,因为这最终决定了他们是否可以从分支机构策略中豁免。即使您在TFS中添加了该用户并对其进行了豁免,即使他们所属的组甚至只是“未设置”以进行策略排除,也可能会阻止他们!