TeamCity-如何通过REST API取消多个版本

时间:2019-06-13 08:04:16

标签: api teamcity pipeline

你好DevOps传播者!

首先,感谢this answer,我能够使用以下curl成功取消单个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 :(得分:0)

由于时间紧迫,没有给出答案,我被迫使用变通办法,因此基于this answer,我准备了以下请求:

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]定位符,仅发送一个请求,该请求将停止所选项目中当前正在运行的构建。