TeamCity:禁用所有TeamCity项目的构建触发器

7
我想请问是否有办法通过运行脚本来禁用所有TeamCity项目的构建触发器?
我有这样一个场景,需要禁用所有构建触发器以防止构建运行。这是因为有时候我可能需要在构建代理机器上执行一些升级过程,这可能需要超过一天的时间。
我不希望手动点击每个不同TeamCity项目上的每个构建触发器的禁用按钮。是否有自动化此过程的方法?
提前感谢。
5个回答

6

使用 Team City REST API。

假设您的 Team City 部署在 http://dummyhost.com,并启用了系统管理员角色的访客访问权限(否则只需切换 URL 中的 guestAuthhttpAuth,并在请求中指定用户名和密码,详细信息请参见文档),您可以执行以下操作:

  1. 获取所有构建配置 GET http://dummyhost.com/guestAuth/app/rest/buildTypes/
  2. 对于每个构建配置,获取所有触发器 GET http://dummyhost.com/guestAuth/app/rest/buildTypes/id:***YOUR_BUILD_CONFIGID***/triggers/
  3. 对于每个触发器,禁用它 PUT http://dummyhost.com/guestAuth/app/rest/buildTypes/id:***YOUR_BUILD_CONFIGID***/triggers/***YOUR_TRIGGER_ID***/disabled

查看完整文档请点击这里


太棒了!非常感谢您的出色回复。这正是我使用TeamCity RestAPI所需要的。 - IAMbeginner
注意:如果没有被授权(如通过httpAuth),TeamCity 10版本的错误消息是“HTTP状态405 - 不支持请求方法'PUT'”。登录后,将PUT请求发送到所提到的URL则可以正常工作。 - Birb
谢谢提示。这是一个带有适当授权的工作脚本示例:https://dev59.com/gJ7ha4cB1Zd3GeqPgTxP#43998789 - Vadzim

4
您可以暂停构建队列。请参见此视频。这样,您无需触碰构建配置;您只是将TC停止。
对于特定代理的升级,最好仅禁用您正在使用的代理。在此处查看更多信息。
这两种方法都不是“通过运行脚本”来完成的,但我认为您只是想要一个脚本化的解决方案,以避免大量GUI点击。

谢谢您的回复。您说得对,我正在寻找一种脚本解决方案,可以自动化这个手动过程。我们有没有办法开发一个脚本来获取保存构建触发器设置的XML标记,并将其更改为禁用触发器?只是好奇。 - IAMbeginner

0

另一个解决方案可能是简单地禁用代理,这样就不会再运行任何构建了。


0

至少从我使用的TeamCity 2021.2.3版本(构建号99711)开始,构建触发器可以通过一次点击来禁用。

enter image description here


0
这是一段Bash脚本,可以通过TeamCity REST API按项目名称模式批量暂停所有仍未暂停的构建配置:
TEAMCITY_HOST=http://teamcity.company.com
CREDS="-u domain\user:password"
curl $CREDS --request GET "$TEAMCITY_HOST/app/rest/buildTypes/" \
| sed -r "s/(<buildType)/\n\\1/g" | grep "Project Name Regex" \
| grep -v 'paused="true"' | grep -Po '(?<=buildType id=")[^"]*' \
| xargs -I {} curl -v $CREDS --request PUT "$TEAMCITY_HOST/app/rest/buildTypes/id:{}/paused" --header "Content-Type: text/plain" --data "true"

这将禁用整个配置而不是触发器。 - BlythMeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接