如何从 PowerShell 设置 Azure 管道变量

Abh*_*rma 7 continuous-integration continuous-deployment azure-devops azure-pipelines

我正在尝试在 PowerShell 中设置 Azure 管道变量值。我winversion在 Azure 管道中创建了一个变量。现在,在 PowerShell 任务中,我想为winversion变量分配一些值。我的简单问题是如何在运行时更改 Azure PipeLine 变量的值?

Write-Host "Main value is $winversion"
$env:WINVERSION="abhinav";
Write-Host "Modified value is $env:WINVERSION"
Write-Host "Main value is $(winversion)"
Run Code Online (Sandbox Code Playgroud)

第一行打印:原始值为 123
第三行打印:修改值为 abhinav
第四行打印:123

我希望当我将 winversion 的值从“123”更改为“abhinav”时,它实际上将管道变量值更改为 abhinav。

在此处输入图片说明

在此处输入图片说明

我想通过 Powershell 更新这个变量。我正在使用一个 PowerShell 脚本调用 API 并尝试更新其变量,但发现页面未找到错误:-

param(
[string]$winVersion
)
$body = "{ 'definition' : { 'id' :85}
}"
$valueName="Winver"
$definitionId=85
$User=""
$Password=""
$base64authinfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $User, $Password)))
$Uri = "https://Muac.visualstudio.com/OSGCXE/_apis/release/releases?api-version=2.0"
$urlDef = "https://Muac.visualstudio.com/OSGCXE/_apis/release/definitions/" + $definitionId + "?api-version=2.0"
$definition = Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64authInfo)} -Method Get -Uri $urlDef 

#Write-Host $definition

$definition.variables.$valueName.Value = "$winVersion"
$definitionJson = $definition | ConvertTo-Json -Depth 50 -Compress

#Write-Host (ConvertTo-Json $definition -Depth 100)

$update=Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64authInfo)} -Method Put -Uri $urlDef -Body $definitionJson -ContentType "application/json"

#Write-Host "$update"

#$buildresponse = Invoke-RestMethod -Method Post -ContentType application/json -Uri $Uri -Headers @{Authorization=("Basic {0}" -f $base64authinfo)} -Body $body

#write-Host $buildresponse.status
Run Code Online (Sandbox Code Playgroud)

Leo*_*SFT 6

如何从 PowerShell 设置 azure 管道变量

这里有点混乱,你$winversion在powershell脚本中使用了变量,但是变量是testvar在管道变量中设置的。

无论如何,无论我们像你一样直接覆盖管道变量值,还是使用脚本"##vso[task.setvariable variable=testvar;]testvalue"覆盖它,覆盖值仅适用于当前构建管道。当您使用$(winversion)获取值时,它仍然会从管道变量值中提取值。要获取当前值,您需要使用$env:WINVERSION.

另外,你说:

我希望当我将 winversion 的值从“123”更改为“abhinav”时,它实际上将管道变量值更改为 abhinav。

如果您的意思是要更改Web 门户上的管道变量值,则需要 REST API(定义 - 更新)来更新构建任务中构建管道定义变量的值。

有一个非常相似的线程,您可以查看答案以了解详细信息:

如何从发布任务修改 Azure DevOps 发布定义变量?

注意:将 API 更改为构建定义:

PUT https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.0
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


归档时间:

查看次数:

11777 次

最近记录:

5 年,6 月 前