Как получить сборки, указав несколько тегов с помощью TeamCity REST API?
У меня есть несколько сборок. Каждая сборка имеет два тега. Теги показывают название и версию модуля. Так что теги, такие как one-module
а также 1.2.3
или же two-module
а также 4.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-module
а также 1.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 гласит:
tags: - "," (запятая) - разделенный список тегов сборки (возвращаются только сборки, содержащие все указанные теги)
Итак, я пытаюсь выбрать сборку по 2 или более тегам, как это. Это не работает?
Что я делаю не так? Как я могу получить последнюю сборку по 2 или более тегам?
1 ответ
Я случайно нашел способ получить сборку двумя или более тегами.
Решение: используйте локатор сборки следующим образом: tags:(one-tag,two-tag,three-tag,etc-tag)
Я не уверен, что это правильное решение. Если это правильно, JetBrains просто забыл обновить документы для TC REST API. Или это просто что-то внутреннее для TeamCity. Я спрашивал об этом здесь в комментариях к документам.
Начиная с Teamcity 10, вы также можете просто перечислить несколько предложений тегов (или предложений тегов not), например
http://server/guestAuth/app/rest/builds?locator=defaultFilter:false,tag:sel,not:tag:unres
Как ни странно, я не нашел способа выбрать сборки с каким-либо из нескольких тегов.
Любое из вышеперечисленных решений будет работать для получения сборок с несколькими тегами. Теперь это унаследованное:tags:(one-tag,two-tag,three-tag,etc-tag)
.Текущие документы рекомендуют делать это следующим образом:tag:one-tag,tag:two-tag
К сожалению, вы не можете использовать более одного предложения тега "not" (ни в устаревшем, ни в текущем синтаксисе).
Если вы попытаетесь использовать более одного предложения тега "not" в устаревшем синтаксисе, вы просто получите плохой результат - то есть сборку или сборки, которые исключают только один из исключенных тегов; если вы используете текущий синтаксис, вы получите 400 неверный запрос со следующим исключением: "В локаторе поддерживается только одно измерение" не "".