构建代理的分支策略豁免不起作用
Branch Policy Exemption for Build Agent not working
作为 TFS 2017 R2 CI 构建定义的一部分,我正在尝试将提交从一个分支合并到另一个分支。如果您可以想象在测试环境中添加错误修复,那么作为构建定义的一部分,我 运行 一些 git 命令。
分支机构启用了策略,本质上需要提交拉取请求。为了使此流程起作用,我需要使构建代理免于分支策略。
我的构建定义是一个单独的 powershell 脚本,它 运行s "whoami" 然后是 git 合并,然后是 git 推送。 Whoami returns 个用户:
domain\adminAccount
管理员帐户具有以下权限属性:
- 集合级别:服务帐户组成员
- 团队项目级别:服务帐户组是 Build Administrators 组的成员
- 存储库级别:Build Administrators 组的 "Exempt from Policy Enforcement" 权限设置为允许。
- 个人级别:如果我添加此用户并跟踪他们的免除政策执行权限,他们会显示 "inherited allow"。见下图。
但是,当我尝试将提交推送到分支时,出现 TFS 错误:
TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.
如果这些帐户权限是正确的,并且当我执行这些脚本时,它们显示该帐户正在使用中,我错过了什么?是否存在一些关于哪个帐户实际执行此我需要豁免政策执行的黑盒逻辑?
在你自己的账号设置了Exempt from Policy Enforcement setbas Allowed权限后,就意味着你已经拥有了直接push到受保护分支的权限。
唯一需要注意的是 构建代理应该以 domain\user
作为您登录 TFS 的用户帐户登录:
更改登录帐户后,您应该重新启动代理服务并重新构建。
Marina Liu - 如果我说错了什么请告诉我,您的回答可能对其他人有帮助!
问题解决的一些注意事项:
- powershell scripts/build 代理正在执行的用户是一条相当无用的信息。相反,您想使用命令 "git config user.name" 查看正在使用的 git 凭据 。
- 原因是无论哪个用户正在执行构建脚本,构建过程都将使用用户的 git 凭据(可在 Ctrl 面板的凭据管理器中查看)或 只是 "nearest" git 凭据。在我们的例子中,用户也是 Build Agent VM 的管理员。
- 我的直觉是,通过拦截 git 命令,查看 git 凭证,然后尝试将其与 AD 帐户相关联,然后检查政策豁免。
- 最后,仔细检查在代理上执行构建过程的任何帐户的组成员资格,因为这最终决定了他们是否有能力不受分支策略的约束。即使您在 TFS 中添加该用户并免除他们,如果他们所属的组甚至只是 "Not Set" 策略排除,它可能会阻止他们!
作为 TFS 2017 R2 CI 构建定义的一部分,我正在尝试将提交从一个分支合并到另一个分支。如果您可以想象在测试环境中添加错误修复,那么作为构建定义的一部分,我 运行 一些 git 命令。
分支机构启用了策略,本质上需要提交拉取请求。为了使此流程起作用,我需要使构建代理免于分支策略。
我的构建定义是一个单独的 powershell 脚本,它 运行s "whoami" 然后是 git 合并,然后是 git 推送。 Whoami returns 个用户:
domain\adminAccount
管理员帐户具有以下权限属性:
- 集合级别:服务帐户组成员
- 团队项目级别:服务帐户组是 Build Administrators 组的成员
- 存储库级别:Build Administrators 组的 "Exempt from Policy Enforcement" 权限设置为允许。
- 个人级别:如果我添加此用户并跟踪他们的免除政策执行权限,他们会显示 "inherited allow"。见下图。
但是,当我尝试将提交推送到分支时,出现 TFS 错误:
TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.
如果这些帐户权限是正确的,并且当我执行这些脚本时,它们显示该帐户正在使用中,我错过了什么?是否存在一些关于哪个帐户实际执行此我需要豁免政策执行的黑盒逻辑?
在你自己的账号设置了Exempt from Policy Enforcement setbas Allowed权限后,就意味着你已经拥有了直接push到受保护分支的权限。
唯一需要注意的是 构建代理应该以 domain\user
作为您登录 TFS 的用户帐户登录:
更改登录帐户后,您应该重新启动代理服务并重新构建。
Marina Liu - 如果我说错了什么请告诉我,您的回答可能对其他人有帮助!
问题解决的一些注意事项:
- powershell scripts/build 代理正在执行的用户是一条相当无用的信息。相反,您想使用命令 "git config user.name" 查看正在使用的 git 凭据 。
- 原因是无论哪个用户正在执行构建脚本,构建过程都将使用用户的 git 凭据(可在 Ctrl 面板的凭据管理器中查看)或 只是 "nearest" git 凭据。在我们的例子中,用户也是 Build Agent VM 的管理员。
- 我的直觉是,通过拦截 git 命令,查看 git 凭证,然后尝试将其与 AD 帐户相关联,然后检查政策豁免。
- 最后,仔细检查在代理上执行构建过程的任何帐户的组成员资格,因为这最终决定了他们是否有能力不受分支策略的约束。即使您在 TFS 中添加该用户并免除他们,如果他们所属的组甚至只是 "Not Set" 策略排除,它可能会阻止他们!