Azure Pipeline:Powershell 任务动态变量询问任务组参数
Azure Pipeline: Powershell task dynamic variable ask in task group parameters
我正在尝试获取最新的测试结果 ID 以在 azure devops 中附加我的屏幕截图。我添加了一个powershell脚本任务,
脚本中的一些变量使用是动态的,天蓝色让我把它们放在任务组参数中,
我刚刚添加了 123 作为默认值,但是这个任务因此失败了。
脚本:
$AzureDevOpsPAT = "123"
$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($AzureDevOpsPAT)")) }
$UriOrga = "https://dev.azure.com/{org}/{proj}/"
$uriAccount = $UriOrga + "_apis/test/runs?api-version=6.0"
$response = Invoke-RestMethod -Uri $uriAccount -Headers $AzureDevOpsAuthenicationHeader -Method Get
$testRunsIdSorted = $response.value | sort-object id -Descending
$result = Invoke-RestMethod -Uri https://dev.azure.com/{org}/{proj}/_apis/test/runs/$($testRunsIdSorted[0].id)?api-version=6.0 -Headers $AzureDevOpsAuthenicationHeader -Method Get
Write-Host "results = $($result | ConvertTo-Json -Depth 100)"
Write-Host "##vso[task.setvariable variable=runId]$($result.id | ConvertTo-Json -Depth 100)"
我执行后得到的任务报错;
如何在 powershell 中定义变量?
看起来您正在将 Powershell $ 变量访问器添加到任务组参数。您还在 $() 中包装了一些脚本,这将告诉管道您正在尝试访问任务组变量。那是不正确的。 $() 管道语法用于访问管道变量,但不是本地 powershell 变量。
例如,这是正确的语法:
Write-Host "$(AzureDevOpsPAT)"
您需要更新参数以使用命名变量而不是 Powershell 变量名称。
我已经更新了您的脚本并更正了变量使用:
$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(AzureDevOpsPAT)")) }
$UriOrga = "https://dev.azure.com/{org}/{proj}/"
$uriAccount = $UriOrga + "_apis/test/runs?api-version=6.0"
$response = Invoke-RestMethod -Uri $uriAccount -Headers $AzureDevOpsAuthenicationHeader -Method Get
$testRunsIdSorted = $response.value | sort-object id -Descending
$result = Invoke-RestMethod -Uri https://dev.azure.com/{org}/{proj}/_apis/test/runs/$testRunsIdSorted[0].id?api-version=6.0 -Headers $AzureDevOpsAuthenicationHeader -Method Get
$results = $result | ConvertTo-Json -Depth 100
Write-Host "results = $results"
Write-Host "##vso[task.setvariable variable=runId]$result.id"
请注意,用此替换当前内容后,您需要返回任务组属性并重置 PAT 的默认值。之后,您需要更新管道以在使用此任务时设置 AzureDevOpsPAT 参数。
这个问题的原因是任务组中定义的变量是环境变量,所以在PowerShell中需要按照环境变量的方式来使用。
例如,您脚本中的 $AzureDevOpsPAT
应该是 $env:AZUREDEVOPSPAT
解决这个问题的一种方法是将参数设为可选。
步骤如下:
转到您的任务组并单击“导出”。然后会下载任务组的json文件
编辑 json 文件以将 tasks.inputs.required
从 true
设置为 false
。
创建一个新的任务组并上传编辑好的josn文件。你会发现在使用任务组时不需要输入参数
我正在尝试获取最新的测试结果 ID 以在 azure devops 中附加我的屏幕截图。我添加了一个powershell脚本任务,
脚本中的一些变量使用是动态的,天蓝色让我把它们放在任务组参数中,
我刚刚添加了 123 作为默认值,但是这个任务因此失败了。
脚本:
$AzureDevOpsPAT = "123"
$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($AzureDevOpsPAT)")) }
$UriOrga = "https://dev.azure.com/{org}/{proj}/"
$uriAccount = $UriOrga + "_apis/test/runs?api-version=6.0"
$response = Invoke-RestMethod -Uri $uriAccount -Headers $AzureDevOpsAuthenicationHeader -Method Get
$testRunsIdSorted = $response.value | sort-object id -Descending
$result = Invoke-RestMethod -Uri https://dev.azure.com/{org}/{proj}/_apis/test/runs/$($testRunsIdSorted[0].id)?api-version=6.0 -Headers $AzureDevOpsAuthenicationHeader -Method Get
Write-Host "results = $($result | ConvertTo-Json -Depth 100)"
Write-Host "##vso[task.setvariable variable=runId]$($result.id | ConvertTo-Json -Depth 100)"
我执行后得到的任务报错;
如何在 powershell 中定义变量?
看起来您正在将 Powershell $ 变量访问器添加到任务组参数。您还在 $() 中包装了一些脚本,这将告诉管道您正在尝试访问任务组变量。那是不正确的。 $() 管道语法用于访问管道变量,但不是本地 powershell 变量。
例如,这是正确的语法:
Write-Host "$(AzureDevOpsPAT)"
您需要更新参数以使用命名变量而不是 Powershell 变量名称。
我已经更新了您的脚本并更正了变量使用:
$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(AzureDevOpsPAT)")) }
$UriOrga = "https://dev.azure.com/{org}/{proj}/"
$uriAccount = $UriOrga + "_apis/test/runs?api-version=6.0"
$response = Invoke-RestMethod -Uri $uriAccount -Headers $AzureDevOpsAuthenicationHeader -Method Get
$testRunsIdSorted = $response.value | sort-object id -Descending
$result = Invoke-RestMethod -Uri https://dev.azure.com/{org}/{proj}/_apis/test/runs/$testRunsIdSorted[0].id?api-version=6.0 -Headers $AzureDevOpsAuthenicationHeader -Method Get
$results = $result | ConvertTo-Json -Depth 100
Write-Host "results = $results"
Write-Host "##vso[task.setvariable variable=runId]$result.id"
请注意,用此替换当前内容后,您需要返回任务组属性并重置 PAT 的默认值。之后,您需要更新管道以在使用此任务时设置 AzureDevOpsPAT 参数。
这个问题的原因是任务组中定义的变量是环境变量,所以在PowerShell中需要按照环境变量的方式来使用。
例如,您脚本中的 $AzureDevOpsPAT
应该是 $env:AZUREDEVOPSPAT
解决这个问题的一种方法是将参数设为可选。
步骤如下:
转到您的任务组并单击“导出”。然后会下载任务组的json文件
编辑 json 文件以将
tasks.inputs.required
从true
设置为false
。创建一个新的任务组并上传编辑好的josn文件。你会发现在使用任务组时不需要输入参数