Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Continuous integration 如何从PowerShell设置Azure管道变量_Continuous Integration_Azure Devops_Azure Pipelines_Continuous Deployment - Fatal编程技术网

Continuous integration 如何从PowerShell设置Azure管道变量

Continuous integration 如何从PowerShell设置Azure管道变量,continuous-integration,azure-devops,azure-pipelines,continuous-deployment,Continuous Integration,Azure Devops,Azure Pipelines,Continuous Deployment,我正在尝试在PowerShell中设置Azure管道变量值。我在Azure管道中创建了一个变量winversion。现在,在PowerShell任务中,我想为winversion变量分配一些值。 我的简单问题是如何在运行时更改Azure管道变量的值 Write-Host "Main value is $winversion" $env:WINVERSION="abhinav"; Write-Host "Modified value is $env

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

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
,但在管道变量中设置了变量
testvar

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

此外,你说:

当我将winversion的值从“123”更改为“abhinav”时 因此它实际上将管道变量值更改为abhinav

如果您的意思是要更改web门户上的管道变量值,则需要REST API()从生成任务更新生成管道定义变量的值

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

注意:将API更改为生成定义:

PUT https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.0

希望这有帮助。

我发现这个链接很有用:

这有您可以执行的全部选项:

您可以在任务之间重用set变量,也可以在作业之间重用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

您不能像常规方式那样向变量添加新值,您需要按照上面的答案进行操作。Write-Host“###vso[task.setvariable=winversion;]test”我也尝试过,但没有任何效果。Write Host“Main value is$(winversion)”始终打印第一个值23 not test。这是Microsoft文档中的另一个链接:我认为它只会在下一步中更新,而不会在管道中的同一步骤中更新winversion@AbhinavSharma啊哈,这是我的错,对此非常抱歉。您应该使用API
PUThttps://vsrm.dev.azure.com/{organization}/{project}/_api/release/definitions?api version=5.0
检查此处的文档:。作为测试,我可以使用Definitions-Get-API来获取所有的发布列表。请查看问题部分中我的完整脚本,我已经在问题中添加了更多行。@AbhinavSharma,为了确保路径正确,您可以尝试使用postman通过Get PAI:
Get获取发布定义https://vsrm.dev.azure.com/{organization}/{project}/_-api/release/definitionId}?api version=5.0
,如果我们得到200OK,那么我们将其更改为update-api。@AbhinavSharma,当我使用postman进行测试时,我们不能使用用户名/密码调用Rest api(401)。您可以尝试使用PAT或访问OAuth令牌来执行此操作,请检查此票证中的详细信息: