TeamCity - Как отменить несколько сборок через REST API - PullRequest
0 голосов
/ 13 июня 2019

Здравствуйте, евангелисты DevOps!

Прежде всего, благодаря этому ответу , я смог успешно отменить одну сборку TeamCity, используя следующий локон:

curl http://teamcity:8111/app/rest/buildQueue/buildType:<buildId> \
  -X POST -u *** \
  -H 'Content-Type: application/json' -d '{
    "buildCancelRequest": {
      "comment": "This build was cancelled.",
      "readdIntoQueue": "false"
    }
  }'

Однако моя идея состояла в том, чтобы отменить несколько сборок в конкретном проекте через TeamCity REST API. Я пробовал следующее:

curl http://teamcity:8111/app/rest/buildQueue/project:<projectId>,count:<n> \
  -X POST -u *** \
  -H 'Content-Type: application/json' -d '{
    "buildCancelRequest": {
      "comment": "Only one build was cancelled.",
      "readdIntoQueue": "false"
    }
  }'

К сожалению, я с треском провалился, потому что была отменена только одна сборка из этого проекта. Я знаю, что могу посылать этот запрос столько раз, сколько есть сборок в проекте, но это уродливый обходной путь! Я хочу сделать это правильно! Могли бы кто-нибудь сказать мне, пожалуйста, , как отменить все сборки в проекте с помощью TeamCity REST API?

1 Ответ

0 голосов
/ 18 июня 2019

Поскольку не хватало времени и ответа не было, я был вынужден использовать обходной путь, поэтому на основании этого ответа я подготовил следующие запросы:

curl http://teamcity:8111/app/rest/buildQueue/project:<projectId>,count:[1-n] \
  -X POST -u *** \
  -H 'Content-Type: application/json' -d '{
    "buildCancelRequest": {
      "comment": "Multiple builds will be cancelled.",
      "readdIntoQueue": "false"
    }
  }'

Вам нужно только заменить n на количество построений, которые у вас есть в выбранном проекте, чтобы отменить их все. Это в основном отправка нескольких запросов, что подразумевает остановку всех сборок в очереди.

Однако, если вы хотите остановить уже запущенные сборки, вам нужно достичь другой конечной точки:

curl http://teamcity:8111/app/rest/builds/project:<projectId>,running:true,count:[1-n] \
  -X POST -u *** \
  -H 'Content-Type: application/json' -d '{
    "buildCancelRequest": {
      "comment": "Already running builds will be stopped.",
      "readdIntoQueue": "false"
    }
  }'

Если вы знаете, что для одного проекта будет выполняться только одна сборка, вы можете пропустить count:[1-n] locator, и будет отправлен только один запрос, который остановит текущую сборку в выбранном проекте.

...