2

我在排队时提供一个变量:

在此处输入图像描述

此变量在构建定义变量中定义:

在此处输入图像描述

当构建运行时,变量作为ABC环境变量公开。因此,如果构建步骤知道期望一个变量abc,那么它可以获得它的值。

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

4

1 回答 1

1

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

$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为您的令牌或管道中的系统访问令牌。

于 2019-01-25T16:33:33.240 回答