代码之家  ›  专栏  ›  技术社区  ›  Ryanman

生成代理不工作的分支策略免除

  •  2
  • Ryanman  · 技术社区  · 7 年前

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

    分支机构启用了策略,这些策略实质上需要请求提交。为了使此流正常工作,我需要将构建代理从分支策略中免除。

    我的build def是一个单独的PowerShell脚本,它运行“whoami”,然后是git合并,然后是git推送。whoami返回一个用户:

    域\管理员帐户
    

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

    • 收款级别:服务帐户组的成员
    • 团队项目级别:服务帐户组是生成管理员组的成员
    • 存储库级别:Build Administrators组将“免除策略强制”权限设置为“允许”。
    • 个人级别:如果我添加此用户并跟踪其免除策略强制权限,则它们将显示“继承的允许”。见下图。
      • 但是,当我尝试将提交推送到分支时,我会得到tfs错误:

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

        如果这些帐户权限是正确的,并且当我执行这些脚本时,它们将此帐户显示为正在使用,那么我缺少什么?是否有一些黑匣子逻辑来说明哪些账户实际执行了我需要从政策执行中免除的操作?

        分支机构启用了策略,这些策略实质上需要请求提交。为了使这个流程工作,我需要从分支策略中免除构建代理。

        我的build def是一个单独的PowerShell脚本,它运行“whoami”,然后是git合并,然后是git推送。whoami返回一个用户:

        domain\adminAccount
        

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

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

        Permissions Trace

        但是,当我尝试将提交推送到分支时,会得到tfs错误:

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

        如果这些帐户权限是正确的,并且当我执行这些脚本时,它们将此帐户显示为正在使用,那么我缺少什么?什么账户有黑匣子逻辑吗事实上执行我需要豁免的政策?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Marina Liu    7 年前

    在允许您自己的帐户使用豁免策略强制setbas之后,这意味着您已经拥有直接推送到受保护分支的权限。

    唯一需要注意的是, 构建代理应以用户帐户身份登录,您登录tfs:。

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

    直接保护分支。

    唯一需要注意的是 生成代理应以身份登录 domain\user 作为登录tfs的用户帐户:

    enter image description here

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

        2
  •  1
  •   Ryanman    7 年前

    刘玛丽娜-如果我说的有什么不正确的话,请告诉我,你的回答可能对其他人有帮助!

    关于解决问题的一些注意事项:

    • PowerShell脚本/生成代理作为执行的用户是相当无用的信息。相反,您要使用命令“git config user.name”来查看 Git凭证 正在使用。
    • 原因是,无论哪个用户正在执行生成脚本,生成过程都将使用用户的Git凭据(可在“控制面板”的“凭据管理器”中查看)。 只是“最近”的Git凭证。在我们的例子中,一个用户 生成代理虚拟机上的管理员。
    • 我的直觉是,通过截取一个git命令,查看git凭据,然后尝试将其关联到一个广告帐户,然后检查策略免除,可以在tfs中强制实施分支策略。
    • 最后,对在代理上执行构建过程的任何帐户的组成员身份进行双重检查,因为这最终决定了它们是否能够免除分支策略。即使您将该用户添加到TFS中并免除它们,如果它们所属的组甚至只是“未设置”策略排除,则可能会阻止它们!
    推荐文章