【问题标题】:How to get builds by specifying multiple tags by TeamCity REST API?如何通过 TeamCity REST API 指定多个标签来获取构建?
【发布时间】:2016-11-17 22:13:54
【问题描述】:

我有一些构建。每个构建都有两个标签。标签显示模块名称和版本。所以标签看起来像one-module1.2.3two-module4.5.6

我可以这样做:

/httpAuth/app/rest/builds/?locator=tags:one-module,branch:unspecified:any&fields=build(tags(tag))

我会得到这个:

{
  "build": [
    {
      "tags": {
        "tag": [
          {
            "name": "1.2.4"
          },
          {
            "name": "one-module"
          }
        ]
      }
    },
    {
      "tags": {
        "tag": [
          {
            "name": "1.2.3"
          },
          {
            "name": "one-module"
          }
        ]
      }
    }
  ]
}

现在我想获得带有标签one-module1.2.4 的最新版本。我该怎么做?

我试试这个:

/httpAuth/app/rest/builds/?locator=tags:one-module,1.2.4,branch:unspecified:any&fields=build(tags(tag))

但我得到了这个:

Error has occurred during request processing (Bad Request).
Error: jetbrains.buildServer.server.rest.errors.LocatorProcessException: Bad locator syntax: Invalid dimension name :'1.2.4'. Should contain only alpha-numeric symbols or be known one. Details: locator: 'tags:one-module,1.2.4,branch:unspecified:any', at position 16
Invalid request. Check locator is specified correctly.

我有 TeamCity 版本 9.1.6。 TeamCity REST API BuildLocator documentation 说:

tags: - ","(comma) - 构建标签的分隔列表(仅构建 包含所有指定的标签被返回)

所以,我尝试选择这样的 2 个或更多标签构建。这不起作用?

我做错了什么?如何通过 2 个或更多标签获取最新版本?

【问题讨论】:

    标签: rest teamcity teamcity-9.0 teamcity-rest-api


    【解决方案1】:

    上述任何一种解决方案都适用于获取具有多个标签的构建。这个现在是旧版:tags:(one-tag,two-tag,three-tag,etc-tag)Current docs建议这样做:tag:one-tag,tag:two-tag

    不幸的是,您不能使用多个“非”标记子句(在旧语法或当前语法中)。

    如果您尝试在旧语法中使用多个“非”标记子句,您只会得到一个糟糕的结果——即仅排除其中一个排除标签的构建或构建;如果使用当前语法,则会收到 400 错误请求,但有以下异常:“定位器中仅支持单个 'not' 维度。”

    【讨论】:

      【解决方案2】:

      从 Teamcity 10 开始,您也可以只列出几个标签子句(或“非”标签子句),例如

      http://server/guestAuth/app/rest/builds?locator=defaultFilter:false,tag:sel,not:tag:unres
      

      奇怪的是,我还没有找到一种方法来选择具有多个标签中的任何一个的构建。

      【讨论】:

        【解决方案3】:

        我无意中找到了通过两个或更多标签构建的方法。

        解决方案:这样使用构建定位器:tags:(one-tag,two-tag,three-tag,etc-tag)

        我不确定这是正确的解决方案。如果正确,JetBrains 只是忘记更新 TC REST API 的文档。或者它只是 TeamCity 内部的东西。我向文档询问了 cmets 中的 here

        【讨论】: