是否可以枚举队列时间提供给TFS vNext构建的所有构建变量?

时间:2019-01-25 02:57:28

标签: azure-devops

我在队列时间提供了一个变量:

enter image description here

在构建定义变量中未定义该变量:

enter image description here

当构建运行时,该变量作为ABC环境变量公开。因此,如果构建步骤知道期望变量abc,则可以获取其值。

但是,如果构建步骤需要枚举队列时间传递的所有变量该怎么办?除了使用特殊的命名约定外,还有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以在PowerShell任务中使用Build-BuildsBuilds-Definition API的组合来执行此操作。您可以将其作为执行构建中的步骤来执行。

$uri = "https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}"

$definitionParameters = Invoke-RestMethod -uri $uri -UseDefaultCredentials -Method Get |
    Select-Object -ExpandProperty variables

$uri = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}"

$buildParameters = Invoke-RestMethod -uri $uri -UseDefaultCredentials -Method Get |
    Select-Object -ExpandProperty parameters | 
    ConvertFrom-Json | 
    Get-Member -MemberType NoteProperty |
    Select-Object -ExpandProperty Name

foreach ($parameter in $buildParameters) {

    $found = $definitionParameters | 
        Get-Member -MemberType NoteProperty |
        Select-Object -ExpandProperty Name |
        Where-Object { $_ -eq $parameter}

    if (-not $found) {
        $parameter
    } 
}

因此,具有参数A,B的构建定义和具有参数A,B,C的构建-将打印C。

我模拟了azuredevops URI,但在本地tfs2018实例上对此进行了测试。

在管道中用您的令牌或系统访问令牌替换-UseDefaultCredentials