从 Build/Release 管道中,我们可以发现它的路径吗?

From within a Build/Release pipeline, can we discover its path?

在 Azure DevOps 中,我们可以将 Build/Release 定义组织到高级文件夹中:

示例:对于驻留在 Framework 文件夹中的每个管道,我想有条件地执行特定任务。预定义的 Build and Release 变量提供了多种方法来发现有关底层文件系统的信息,但对于此内部路径信息似乎没有任何帮助。

在管道 运行 中,是否可以确定它所在的 folder/path?

你可以用 Rest 查看一下 API - Builds - Get:

GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=6.0

在响应中您会得到 definition 详细信息,包括 path:

"definition":  {
                   "drafts":  [

                              ],
                   "id":  13,
                   "name":  "TestBuild",
                   "url":  "https://dev.azure.com/xxxxx/7fcdafd5-b891-4fe5-b2fe-xxxxxxx/_apis/build/Definitions/13?revision=1075",
                   "uri":  "vstfs:///Build/Definition/13",
                   "path":  "\Test Folder",
                   "type":  "build",
                   "queueStatus":  "enabled",
                   "revision":  1075,
                   "project":  {
                                   "id":  "7fcdafd5-b891-4fe5-b2fe-9b9axxxxx",
                                   "name":  "Sample",
                                   "url":  "https://dev.azure.com/xxxx/_apis/projects/7fcdafd5-b891-4fe5-b2fe-9xxxxxx",
                                   "state":  "wellFormed",
                                   "revision":  97,
                                   "visibility":  "private",
                                   "lastUpdateTime":  "2021-03-22T10:25:39.33Z"
                               }
               },

所以:

  • 添加一个简单的 PS 脚本来调用其余部分 API(使用 $(Build. BuildId) 预定义变量)
  • 检查 path 属性
  • 的值
  • 如果它包含 Framework 文件夹,请设置一个新变量 this command:
Write-Host "##vso[task.setvariable variable=isFramework;]true"

现在,在任务中添加一个custom condition:

and(succeeded(), eq(variables['isFramework'], 'true'))