来自 TeamCity 的 运行 TF.exe 失败。来自同一服务器的相同脚本并使用相同的用户作为代理成功

Running TF.exe from TeamCity fails. Same script from same server and using same user as agent succeeds

作为构建过程的一部分,我需要将一些代码推送到 TFS 服务器(TFS 源代码管理)。我正在使用 /Login: 参数和服务帐户的详细信息调用 TF.exe。如果我 运行 这个批处理文件在本地作为我的用户,或者在构建代理上作为本地系统(代理 运行 作为这个用户)它工作正常。凭据被接受。如果我将相同的脚本放入 TeamCity 的 "Custom Script" 构建步骤,脚本将失败并显示错误“TF30063:您无权访问 [ServerName]\tfs\DefaultCollection。 有什么想法吗?

    mkdir Workspace
cd Workspace
tf workspace -new CodeWorkspace;username -noprompt -server:[ServerName]/tfs/DefaultCollection /login:"username,password"
tf workfold -map $/"Database Dependencies" . -workspace:CodeWorkspace -server:[ServerName]/tfs/DefaultCollection /login:"username,password"
tf get /force /all -recursive -noprompt  /login:"username,password"
tf checkout MercuryDatabaseShared.dacpac MercuryPortal.dacpac PhoenixDatabase.dacpac  /login:"username,password"
tf checkin MercuryDatabaseShared.dacpac MercuryPortal.dacpac PhoenixDatabase.dacpac  /login:"username,password" /noprompt /force /comment:"***FROM TEAMCITY - %build.number%***" 
tf workfold -unmap . -workspace:CodeWorkspace /login:"username,password"
tf workspace -delete CodeWorkspace -noprompt -server:[ServerName]/tfs/DefaultCollection  /login:"username,password"
cd ..
RMDIR /S /Q Workspace

如果您可以在代理计算机上手动成功执行 tf 命令,但在通过 TeamCity 构建时失败,请检查 TeamCity 的代理配置是否使用 运行 作为与本地计算机相同的帐户。您可以从以下几个方面进行故障排除:

  • 安装后为代理选择服务帐户时,请检查您是否运行用户帐户下的TeamCity代理。

  • 在 TeamCity web 中仔细检查 UI -> 代理选项卡 -> 单击代理 -> 代理参数选项卡 -> 环境变量选项卡 -> 确保域和用户名是与您登录TFS的域和用户名一致。

  • 当 tf 命令使用 /login:username,password 选项时,请改用 domain\username 和登录密码。如

    tf workspaces /collection:http://tfsServer:8080/tfs/DefaultCollection /login:"fareast\myname,password"