如何在Azure Devops管道中使用PowerShell根据条件触发代理作业

时间:2019-12-16 11:24:51

标签: azure powershell azure-devops azure-pipelines azure-pipelines-release-pipeline

我有一个PowerShell,如下所示:

echo "Hello-World"
$MyVariable = "Proceed"
echo $MyVariable

我想做什么:

如果 MyVariable 仅是“ 继续”,则必须运行Agent Job2

我已使用PowerShell任务并将给定变量名称用作MyVariableOutput enter image description here

我已在Agent Job2级别完成以下配置

enter image description here

能不能让我知道如何满足这些条件?

仅当Agent Job1上的Powershell脚本生成 Proceed 作为 MyVariable 的值时 代理Job2将运行。

注意:Agent Job1和Agent Job2是同一发布管道的一部分

1 个答案:

答案 0 :(得分:0)

如果您希望使用 GUI 配置管道,则必须运行脚本以将 MyVariable 添加为 Variables ,而不是通过以下方式添加临时变量:称为api。因为agent job1完成后,您刚刚用$MyVariable = "Proceed"定义的变量将不会转移到下一个代理作业。 agent job1agent 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

enter image description here