我有一个PowerShell,如下所示:
echo "Hello-World"
$MyVariable = "Proceed"
echo $MyVariable
我想做什么:
如果 MyVariable 仅是“ 继续”,则必须运行Agent Job2
我已使用PowerShell任务并将给定变量名称用作MyVariableOutput
我已在Agent Job2级别完成以下配置
能不能让我知道如何满足这些条件?
仅当Agent Job1上的Powershell脚本生成 Proceed 作为 MyVariable 的值时 代理Job2将运行。
注意:Agent Job1和Agent Job2是同一发布管道的一部分
答案 0 :(得分:0)
如果您希望使用 GUI 配置管道,则必须运行脚本以将 MyVariable 添加为 Variables ,而不是通过以下方式添加临时变量:称为api。因为agent job1
完成后,您刚刚用$MyVariable = "Proceed"
定义的变量将不会转移到下一个代理作业。 agent job1
和agent job2
彼此独立。
在座席工作1中:
配置2个Powershell任务。
(1)第一个用于定义带有值的变量并将其设置为输出变量:
echo "Hello-World"
echo "##vso[task.setvariable variable=MyVariable;isOutput=true]Proceed"
echo $MyVariable
不要忘记在此任务中指定其reference
名称 MyVariableOutput 。
(2)第二个作业用于将这个output variable
添加到Variables
中,然后agent job2
可以访问它:
$connectionToken="{token}"
$urlget = "https://vsrm.dev.azure.com/{org}/{project}/_apis/release/releases/$(Release.ReleaseId)?api-version=5.1"
$base64AuthInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$getdef = Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET -ContentType application/json -Uri $urlget
##Write-Host Pipeline = $($getdef | ConvertTo-Json -Depth 100)
$MyVariable=@"
{
"value": "$(MyVariableOutput.MyVariable)"
}
"@
$getdef.variables | add-member -Name "MyVariable" -value (Convertfrom-Json $MyVariable) -MemberType NoteProperty -Force -PassThru
$getdef = $getdef | ConvertTo-Json -Depth 100
$getdef | clip
$urlput = "https://vsrm.dev.azure.com/{org}/{project}/_apis/release/releases/$(Release.ReleaseId)?api-version=5.1"
$putdef = Invoke-RestMethod -Uri $urlput -Method PUT -Body $getdef -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
上面的脚本将创建一个变量MyVariable
,其值为Proceed
。
在agent job2
中,如下所示配置条件:
eq(variables['MyVariable'],'Proceed')
您可以看到代理job2可以成功运行,因为它已检测到MyVariable
的值为Proceed
。