繁体   English   中英

如何从 PowerShell 设置 Azure 管道变量

[英]How To set Azure pipeline variable from PowerShell

我正在尝试在 PowerShell 中设置 Azure 管道变量值。 我在 Azure 管道中创建了一个变量winversion 现在,在 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)"

第一行打印:原始值为 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

如何从 PowerShell 设置 azure 管道变量

这里有点混乱,你在powershell脚本中使用了变量$winversion ,但是在pipeline变量中设置了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

希望这可以帮助。

我发现这个链接很有帮助: https : //docs.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands?view=azure-devops&tabs=powershell

这具有您可以执行的操作的完整选项: https : //docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch

您可以在任务之间重复使用 set 变量,也可以在作业之间重复使用。 我在舞台上找不到任何东西。

总之:

jobs:

# Set an output variable from job A
- job: A
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - powershell: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the value"
    name: setvarStep
  - script: echo $(setvarStep.myOutputVar)
    name: echovar

# Map the variable into job B
- job: B
  dependsOn: A
  pool:
    vmImage: 'ubuntu-16.04'
  variables:
    myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutputVar'] ]  # map in the variable
                                                                          # remember, expressions require single quotes
  steps:
  - script: echo $(myVarFromJobA)
    name: echovar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM