使用PowerShell从构建步骤访问TFS TeamProjectCollection

时间:2016-12-01 16:22:48

标签: powershell tfs tfs2015

我正在尝试在我们的一个团队项目中使用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。

1 个答案:

答案 0 :(得分:0)

您需要专门指示TFS / VSTS允许执行的构建回调到TFS / VSTS。这可以保护您的服务器,防止恶意开发人员退出构建脚本。

enter image description here

你应该看到"启用Auth" Build的Options选项卡中的选项。

**注意:您应该使用提供的任务SDK:https://github.com/Microsoft/vsts-task-lib