【发布时间】:2017-04-16 09:08:07
【问题描述】:
我正在尝试在我们的一个团队项目中使用 powershell 创建一个预构建步骤,以增加该 VS 解决方案中所有程序集/应用程序的内部版本号。这是针对 TFS2015-update 2 的。
我在这里和那里在线找到了一些示例代码,并拼凑了我认为可行的内容。我可以在 TFS 服务器上手动运行 powershell 脚本(作为我的 windows 帐户向服务器进行身份验证),它工作正常,但它在构建过程中无法正常运行。
这是我不断收到错误的示例代码。它与 TFS 服务器的身份验证/连接有关:
$CollectionUrl=New-Object System.Uri("$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI")
$BuildUrl="$env:BUILD_BUILDURI"
# get the team project collection
$TeamProjectCollection=[Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($CollectionUrl)
# get the build server
$BuildServer=$TeamProjectCollection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
# get the build detail
$BuildDetail=$BuildServer.GetBuild($BuildUrl)
# get the build definition
$BuildDefinition=$BuildDetail.BuildDefinition
我得到的错误是:
使用“1”参数调用“GetService”的异常:“TF30063:您无权访问http://servername/TPCName
我已经尝试使用上面的调用来获取 TPC,以及它的构造函数,但两者都不起作用。
$TeamProjectCollection=New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection($CollectionUrl)
所以我开始尝试根据我的服务器登录凭据构建一个凭据对象,看看我是否可以通过这种方式连接到 TPC。仍然不起作用(在服务器上或构建过程中),但出现不同的错误:
$netCred = New-Object System.Net.NetworkCredential($username,$password)
$basicCred = New-Object Microsoft.TeamFoundation.Client.BasicAuthCredential($netCred)
$tfsCred = New-Object Microsoft.TeamFoundation.Client.TfsClientCredentials($basicCred)
# get the team project collection
$TeamProjectCollection=New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection($CollectionUrl, $tfsCred)
抛出异常:
使用“1”参数调用“GetService”时出现异常:“TF400324:服务器无法使用 Team Foundation 服务。
我还尽力为 TFS 服务运行的 Windows 帐户修改 TFS 权限,以确保那里没有问题。我相当肯定我已将其添加到我的身份所在的所有角色/组中,但构建仍然无法通过身份验证。
我在这一点上不知所措。有人可以帮我弄清楚如何使用定义的凭据正确连接到 TFS 服务器,或者帮我调整服务帐户、身份、配置选择等的权限;需要访问 teamProjectCollection。
【问题讨论】:
-
您使用哪种构建系统? vNext 还是 XAML?根据您的描述,您想增加内部版本号,但 powershell 脚本正在获取构建定义。你想实现什么功能?
标签: powershell tfs tfs-2015