如何向本地 TFS 验证 build.vnext 代理
How to authenticate build.vnext agent to on-premise TFS
我们有一个本地 TFS2015RC 安装。服务器是我们域的一部分。
在同一域中的另一台服务器上配置构建代理 (build.vnext) 时,一切正常。
但是,在此域外的服务器上配置构建代理时,会发生以下情况:
使用 ConfigureAgent。ps1:
- 接受所有默认值
- 选择交互模式(e.i。未安装为 Windows 服务)
- 然后会出现一个身份验证对话框:
- 我输入一个域用户(
domain\user
),它是 TFS 的管理员
- 我提供这个用户的域密码。如果密码错误,对话框会提示我需要更正它(Windows 中的默认行为)
- 脚本继续运行,但在启动代理后它显示:
ERROR:
VS30063: You are not authorized to access http://{server}:8080/tfs
为什么身份验证失败?我如何找出它正在尝试对哪个用户进行身份验证?
我试过:
- 查看 _diag 文件夹中的日志文件。日志文件的状态完全相同,没有更多可用信息。
- 尝试了 this link 的建议以在 TFS 服务器上的 IIS 上启用基本身份验证。我这样做了(不情愿地),但它没有解决问题。
好的,我设法解决了这个问题:
- 在 TFS 服务器上创建用户 TFS\remotebuild
- 给这个本地
用户访问 TFS 代理池
- 授予此本地用户访问 TFS 源代码管理的权限
- 在生成服务器上使用与 TFS\remotebuild
相同的密码创建了一个用户 BUILD\remotebuild
- 当 运行 构建代理配置脚本时,当它询问服务帐户时,选择 BUILD\remotebuild 用户
- 当它要求 TFS 身份验证时,提供 TFS\remotebuild 用户凭据
像这样,成功了!
但是,我无法以某种方式将它设置为 "console mode" 中的 运行 (即不将其作为 windows 服务启动)。这不是什么大问题。
此后出现了一个小问题:在日志文件中我可以看到它正在尝试连接到 http://NAME-OF-TFS:8080/tfs instead of http://IP-ADDRESS:8080/tfs,但我可以通过在构建机器上的主机文件中添加一行来解决该问题。
身份
这可能涉及最多三个不同的身份,定义如下:
PoolAdmin
- 用于将代理添加到代理池的帐户。此用户必须是您要使用的池的 Agent Pool Administrators
角色的一部分。
TfsServiceAccount
- 代理应该用来连接到 TFS 的帐户。此帐户应属于您要使用的池的 Agent Pool Service Accounts
角色。尽管 docs 表明此角色成员资格应自动建立,但在此工作组方案中可能并非如此。
LocalServiceAccount
- 代理将 运行 在构建代理计算机上使用的服务帐户。这可能是本地帐户或第二个域上的帐户,具体取决于您的配置。
注意:根据您的 TFS 实例的设置方式,前两个最终可能是同一个帐户。
配置
按照以下步骤配置代理。这些步骤假设您已经将代理软件解压缩到 C:\agent
.
- 以
LocalServiceAccount.
身份登录构建代理机器
- 删除所有已保存的 TFS 服务器凭据。
- 打开控制面板 > 用户帐户 > 凭据管理器.
- 单击Windows 凭据。
- 删除所有为您的 TFS 服务器保存的凭据。
- 删除
C:\agent\settings.json
,如果存在。
- 打开
C:\Agent
和 运行 ConfigureAgent.cmd
的管理命令提示符。
- 按照提示操作。当提示安装为服务时,输入
Y
.
- 当系统提示输入用户帐户时,输入
LocalServiceAccount
的凭据。
当您看到向 TFS 进行身份验证的弹出提示时,输入 PoolAdmin
的凭据。 重要:取消选中记住我的凭据复选框。
If PoolAdmin
and TfsServiceAccount
are the same, instead you can remember the credentials and skip the remaining steps.
停止 VSO 代理服务。
- 使用 Internet Explorer,打开 URL 到您的 TFS 服务器。
- 当提示对 TFS 进行身份验证时,输入
TfsServiceAccount
的凭据。 重要:这一次,选中记住我的凭据复选框。
- 启动 VSO 代理服务。
您的新代理现在应该在池中列为在线。
参考文献:
我们有一个本地 TFS2015RC 安装。服务器是我们域的一部分。
在同一域中的另一台服务器上配置构建代理 (build.vnext) 时,一切正常。
但是,在此域外的服务器上配置构建代理时,会发生以下情况:
使用 ConfigureAgent。ps1:
- 接受所有默认值
- 选择交互模式(e.i。未安装为 Windows 服务)
- 然后会出现一个身份验证对话框:
- 我输入一个域用户(
domain\user
),它是 TFS 的管理员 - 我提供这个用户的域密码。如果密码错误,对话框会提示我需要更正它(Windows 中的默认行为)
- 我输入一个域用户(
- 脚本继续运行,但在启动代理后它显示:
ERROR:
VS30063: You are not authorized to access http://{server}:8080/tfs
为什么身份验证失败?我如何找出它正在尝试对哪个用户进行身份验证?
我试过:
- 查看 _diag 文件夹中的日志文件。日志文件的状态完全相同,没有更多可用信息。
- 尝试了 this link 的建议以在 TFS 服务器上的 IIS 上启用基本身份验证。我这样做了(不情愿地),但它没有解决问题。
好的,我设法解决了这个问题:
- 在 TFS 服务器上创建用户 TFS\remotebuild
- 给这个本地 用户访问 TFS 代理池
- 授予此本地用户访问 TFS 源代码管理的权限
- 在生成服务器上使用与 TFS\remotebuild 相同的密码创建了一个用户 BUILD\remotebuild
- 当 运行 构建代理配置脚本时,当它询问服务帐户时,选择 BUILD\remotebuild 用户
- 当它要求 TFS 身份验证时,提供 TFS\remotebuild 用户凭据
像这样,成功了! 但是,我无法以某种方式将它设置为 "console mode" 中的 运行 (即不将其作为 windows 服务启动)。这不是什么大问题。
此后出现了一个小问题:在日志文件中我可以看到它正在尝试连接到 http://NAME-OF-TFS:8080/tfs instead of http://IP-ADDRESS:8080/tfs,但我可以通过在构建机器上的主机文件中添加一行来解决该问题。
身份
这可能涉及最多三个不同的身份,定义如下:
PoolAdmin
- 用于将代理添加到代理池的帐户。此用户必须是您要使用的池的Agent Pool Administrators
角色的一部分。TfsServiceAccount
- 代理应该用来连接到 TFS 的帐户。此帐户应属于您要使用的池的Agent Pool Service Accounts
角色。尽管 docs 表明此角色成员资格应自动建立,但在此工作组方案中可能并非如此。LocalServiceAccount
- 代理将 运行 在构建代理计算机上使用的服务帐户。这可能是本地帐户或第二个域上的帐户,具体取决于您的配置。
注意:根据您的 TFS 实例的设置方式,前两个最终可能是同一个帐户。
配置
按照以下步骤配置代理。这些步骤假设您已经将代理软件解压缩到 C:\agent
.
- 以
LocalServiceAccount.
身份登录构建代理机器
- 删除所有已保存的 TFS 服务器凭据。
- 打开控制面板 > 用户帐户 > 凭据管理器.
- 单击Windows 凭据。
- 删除所有为您的 TFS 服务器保存的凭据。
- 删除
C:\agent\settings.json
,如果存在。 - 打开
C:\Agent
和 运行ConfigureAgent.cmd
的管理命令提示符。 - 按照提示操作。当提示安装为服务时,输入
Y
. - 当系统提示输入用户帐户时,输入
LocalServiceAccount
的凭据。 当您看到向 TFS 进行身份验证的弹出提示时,输入
PoolAdmin
的凭据。 重要:取消选中记住我的凭据复选框。If
PoolAdmin
andTfsServiceAccount
are the same, instead you can remember the credentials and skip the remaining steps.停止 VSO 代理服务。
- 使用 Internet Explorer,打开 URL 到您的 TFS 服务器。
- 当提示对 TFS 进行身份验证时,输入
TfsServiceAccount
的凭据。 重要:这一次,选中记住我的凭据复选框。 - 启动 VSO 代理服务。
您的新代理现在应该在池中列为在线。