2013-08-16 125 views
0

我正在尝试创建一个PS脚本来创建TFS构建定义文件。我发现下面的例子。但是,它不能正常工作。我试图按照这个例子创建一个没有任何成功的脚本。在确定为什么下面的脚本任何帮助不工作表示赞赏,并就如何创建一个PS脚本或一个例子构建TFS的PowerShell脚本定义

param(
      [Parameter(Mandatory=$true)] 
      [string] $buildName, 
     [string] $serverName="http://tfs:80/", 
     [string] $teamProject="MyProject" 
) 

# VS 2010 
# $tfsClientVersion = ", Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
# VS 2008 
$tfsClientVersion = ", Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 

[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client"+$tfsClientVersion) 
[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.Build.Client"+$tfsClientVersion) 
[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.VersionControl.Client"+$tfsClientVersion) 

$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName) 
$versionControl = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) 
$buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer]) 

$def = $buildserver.CreateBuildDefinition($teamProject) 
$def.Name = "$buildName" 
$def.Description = "Created by Powershell script " 
$agentSpec = $buildServer.CreateBuildAgentSpec($teamProject) 
$agentSpec.Name = "build" 
$agent = $buildServer.QueryBuildAgents($agentSpec).Agents[0] 
$def.DefaultBuildAgent = $agent 
$def.DefaultDropLocation = "\\build\PrivateDrops" 
$def.RetentionPolicies.Item('Failed').NumberToKeep = 5 
$def.RetentionPolicies.Item('Stopped').NumberToKeep = 0 #None 
$def.RetentionPolicies.Item('PartiallySucceeded').NumberToKeep = 5 
$def.RetentionPolicies.Item('Succeeded').NumberToKeep = 5 
$def.Save() 

回答

0

你似乎尝试创建使用2008年组装和形式给出TFS 2010生成定义还指导,而不提供输出信息和错误是很难说确切的问题,但很少有事情脱颖而出:

  • 使用符合您的TFS服务器组件的版本(如您标记问题TFS2010)
  • 2010年提示的方式有工作与API是从uri创建TfsTeamProjectCollection对象,从那里你w如你现在所做的那样使用不当服务。
  • 您的代码建议是2008年,tfs在2010年如何构建工作发生了重大变化,具体而言,DefaultBuildAgent属性已过时且未使用,代理由构建控制器使用以下脚本作为脚本的参考。

http://geekswithblogs.net/jakob/archive/2010/04/26/creating-a-build-definition-using-the-tfs-2010-api.aspx

+0

我开始在基于示例一个PS脚本。 )$处理= $ def.ProcessParameters $ def.ProcessParameters = $过程 $ def.RetentionPolicyList.Clear( $ def.Save()这给我一个错误说“异常调用 “保存” 和 “0” 的说法(s):“TF42073:该值不能为空(参数名称:过程)”我在这里丢失了什么? – user1636380

+0

您是否获得并为您的定义分配过程模板,如文章i中所链接的?您可能需要做更多的工作以获得您的自定义模板。 //获取默认模板 var defaultTemplate = buildServer.QueryProcessTemplates(teamProject).Where(p => p.TemplateType == ProcessTemplateType.Default).First(); buildDefinition.Process = defaultTemplate; – drk

+0

是的,我能够让它工作。我还有几个问题,这些问题通过下面的帖子回答。 http://stackoverflow.com/questions/18389222/convert-c-sharp-logic-to-powershell-for-tfs http://stackoverflow.com/questions/18447879/powershell-syntax-error – user1636380