【问题标题】:Team Foundation Server 2018 API Build Definition ErrorTeam Foundation Server 2018 API 构建定义错误
【发布时间】:2019-03-07 18:51:11
【问题描述】:

我正在尝试使用 Powershell 5.1 通过 REST API 创建新的构建定义。

我的脚本包含一些文件。 在我的脚本中,我有这个:

文件 1:

 $newDefinitionUrl = "http://tfs:8080/tfs/collection/project/_apis/build/definitions?api-version={2}" -f $CollectionUrl,$TeamProjectName,$BuildApiVersion
        $method = "POST"
        $headers = @{"Content-Type"="application/json"} 
        $body=ConvertTo-Json $template -Depth 20 -Compress  

    #[ERROR 1 - line 80] 
    Invoke-RestMethod -Credential $credentials -Uri $newDefinitionUrl -Method $method -Headers $headers -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) 

文件 2:

$templateName = "$bdType $systemTecnology"
$buildDefinitionName = Get-GloboBuildDefinitionName -System $System -BranchName $BranchName -Type $Type

 #[Error 2 - Line 115]
$newDef = New-BuildDefinition -CollectionUrl $Tfs.Uri.AbsoluteUri -TeamProjectName $TeamProjectName -TemplateName $templateName  -BuildDefinitionName $buildDefinitionName -TemplateTeamProjectName $TeamProjectBuildTemplate -OverwriteParameters $parameters 

文件 3:

Write-Output "`t-> Criando branch para o $workitemTitle no SourceControl apartir do Release..." -OutVariable +MSGS
        New-TFVCBrach -Tfs $Tfs -SourcePath "$/$TeamProjectName/$System/$branchOrigin" -DestinationPath "$/$TeamProjectName/$System/$branchFolder/$workitemTitle" -ErrorVariable +MSGS | Out-String | Write-Verbose

        Write-Output "`t-> Concedendo permissão ao time ""[$TeamProjectName]\$System"" no branch..." -OutVariable +MSGS
        Get-Content $GloboTFSSetupTemplateFolderPath"\PermissionsFolders.txt" | Set-BranchPermisisons -CollectionUrl $CollectionUrl -TeamProjectName $TeamProjectName -System $System -BranchRelativePath "$branchFolder/$workitemTitle" -Group "[$TeamProjectName]\$System" -ErrorVariable +MSGS | Out-String | Write-Verbose

        Write-Output "`t-> Criando build definition de ""$buildType"" para o ""$WorkItemType""..." -OutVariable +MSGS

#[Error 3 - Line 99]            
New-GloboBuildDefinition -Tfs $Tfs -TeamProjectName $TeamProjectName -System $System -Type $buildType -BranchName $workitemTitle -ErrorVariable +MSGS | Out-String | Write-Verbose 

当我尝试运行脚本时,我得到了 3 个错误,我在此处用 #[Error 1/2/3 - Line x] 进行了标记,以便于识别。

这是错误:

在我的 TFS 2015 中,此脚本有效。 但现在在 TFS 2018 中,我遇到了这个错误。

谁能帮我解决这个问题?

此外,我还遇到了一些错误:

Cannot index into a null array.
System.Management.Automation.CmdletInvocationException: Cannot index into a null array. ---> System.Management.Automation.RuntimeException: Cannot index into a null array. at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception) at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.Interpreter.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.LightLambda.RunVoid1[T0](T0 arg0) at System.Management.Automation.ScriptBlock.InvokeWithPipeImpl(ScriptBlockClauseToInvoke clauseToInvoke, Boolean createLocalScope, Dictionary`2 functionsToDefine, List`1 variablesToDefine, ErrorHandlingBehavior errorHandlingBehavior, Object dollarUnder, Object input, Object scriptThis, Pipe outputPipe, InvocationInfo invocationInfo, Object[] args) at System.Management.Automation.ScriptBlock.<>c__DisplayClass57_0.b__0() at System.Management.Automation.Runspaces.RunspaceBase.RunActionIfNoRunningPipelinesWithThreadCheck(Action action) at System.Management.Automation.ScriptBlock.InvokeWithPipe(Boolean useLocalScope, ErrorHandlingBehavior errorHandlingBehavior, Object dollarUnder, Object input, Object scriptThis, Pipe outputPipe, InvocationInfo invocationInfo, Boolean propagateAllExceptionsToTop, List`1 variablesToDefine, Dictionary`2 functionsToDefine, Object[] args) at System.Management.Automation.ScriptBlock.InvokeUsingCmdlet(Cmdlet contextCmdlet, Boolean useLocalScope, ErrorHandlingBehavior errorHandlingBehavior, Object dollarUnder, Object input, Object scriptThis, Object[] args) at Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord() at System.Management.Automation.CommandProcessor.ProcessRecord() --- End of inner exception stack trace --- at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception) at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
Cannot index into a null array.
Cannot index into a null array.
System.Management.Automation.CmdletInvocationException: Cannot index into a null array. ---> System.Management.Automation.RuntimeException: Cannot index into a null array. at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception) at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.Interpreter.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.LightLambda.RunVoid1[T0](T0 arg0) at System.Management.Automation.ScriptBlock.InvokeWithPipeImpl(ScriptBlockClauseToInvoke clauseToInvoke, Boolean createLocalScope, Dictionary`2 functionsToDefine, List`1 variablesToDefine, ErrorHandlingBehavior errorHandlingBehavior, Object dollarUnder, Object input, Object scriptThis, Pipe outputPipe, InvocationInfo invocationInfo, Object[] args) at System.Management.Automation.ScriptBlock.<>c__DisplayClass57_0.b__0() at System.Management.Automation.Runspaces.RunspaceBase.RunActionIfNoRunningPipelinesWithThreadCheck(Action action) at System.Management.Automation.ScriptBlock.InvokeWithPipe(Boolean useLocalScope, ErrorHandlingBehavior errorHandlingBehavior, Object dollarUnder, Object input, Object scriptThis, Pipe outputPipe, InvocationInfo invocationInfo, Boolean propagateAllExceptionsToTop, List`1 variablesToDefine, Dictionary`2 functionsToDefine, Object[] args) at System.Management.Automation.ScriptBlock.InvokeUsingCmdlet(Cmdlet contextCmdlet, Boolean useLocalScope, ErrorHandlingBehavior errorHandlingBehavior, Object dollarUnder, Object input, Object scriptThis, Object[] args) at Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord() at System.Management.Automation.CommandProcessor.ProcessRecord() --- End of inner exception stack trace --- at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception) at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
Cannot index into a null array.
System.Management.Automation.CmdletInvocationException: {"$id":"1","innerException":null,"message":"The collection must contain at least one element.\r\nParameter name: PathFilters","typeName":"System.ArgumentException, mscorlib","typeKey":"ArgumentException","errorCode":0,"eventId":0} ---> System.Net.WebException: The remote server returned an error: (400) Bad Request. at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.GetResponse(WebRequest request) at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord() --- End of inner exception stack trace --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input) at System.Management.Automation.PipelineOps.InvokePipeline(Object input, Boolean ignoreInput, CommandParameterInternal[][] pipeElements, CommandBaseAst[] pipeElementAsts, CommandRedirection[][] commandRedirections, FunctionContext funcContext) at System.Management.Automation.Interpreter.ActionCallInstruction`6.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
{"$id":"1","innerException":null,"message":"The collection must contain at least one element.\r\nParameter name: PathFilters","typeName":"System.ArgumentException, mscorlib","typeKey":"ArgumentException","errorCode":0,"eventId":0}

EDIT1:我一直在试图解决这个问题,我发现了这个: TFS2015 REST API Build definition update

但是我不知道如何解决我的错误。 我已经尝试更改我的代码 -Depth 但仍然出现错误。 请帮忙。

【问题讨论】:

  • 你的意思是在第 80 行对吗?我应该如何离开它呢?
  • 你能把它写在这里吗?

标签: tfs tfs-2015 tfs-sdk azure-devops-rest-api


【解决方案1】:

我从来不需要进行文本编码来让它工作。我通常只是将 json 传递给 Invoke-RestMethod 请求。我尝试编辑我已知的一个好的函数来添加编码,它似乎给出了类似的错误。我会尝试将您的代码调整为:

$newDefinitionUrl = "http://tfs:8080/tfs/collection/project/_apis/build/definitions?api-version={2}" -f $CollectionUrl,$TeamProjectName,$BuildApiVersion
    $method = "POST"
    $headers = @{"Content-Type"="application/json"} 
    $body=ConvertTo-Json $template -Depth 20 -Compress  

#[ERROR 1 - line 80] 
Invoke-RestMethod -Credential $credentials -Uri $newDefinitionUrl -Method $method -Headers $headers -Body $body

【讨论】:

  • 好的,我明天试试,然后回复。感谢您的帮助。
  • 我已经尝试过了,但现在我得到了一个不同的错误。我将在此处发布答案。
  • 我已经尝试过您的解决方案,但仍然出现错误。看起来有些错误。有什么想法吗?
猜你喜欢
  • 2019-11-20
  • 2018-09-21
  • 2019-06-27
  • 2019-06-12
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 2010-10-03
相关资源
最近更新 更多