Ошибка определения сборки API Team Foundation Server 2018
Я пытаюсь создать новое определение сборки через REST API, используя Powershell 5.1.
Мой скрипт состоит из нескольких файлов. В моем сценарии у меня есть это:
Файл 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 ошибки, которые я пометил #[Ошибка 1/2/3 - Строка 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 обновление определения
Однако я не знаю, как исправить мои ошибки. Я пытался изменить свой код - Глубина, но все же я получаю ошибки. Пожалуйста помоги.
0 ответов
Мне никогда не приходилось кодировать текст, чтобы это работало. Обычно я просто передаю 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