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

TeamCity: Disable build trigger for all TeamCity projects

我想问一下,有什么方法可以通过 运行 脚本禁用所有 TeamCity 项目的构建触发器吗?

我有一个场景需要禁用所有构建触发器以防止构建 运行。这是因为有时,我可能需要在构建代理计算机上执行一些升级过程,这将花费一天以上的时间。

我不希望在每个不同的 TeamCity 项目上为每个构建触发器手动单击“禁用”按钮。有没有办法使这个过程自动化?

提前致谢。

您可以暂停构建队列。参见 this video。这样你根本不需要触及构建配置;你只是让 TC 停止。

对于 agent-specific 升级,最好只禁用您正在使用的代理。参见 here

这些都不是你问的"by running a script",但我认为你只是在要求一个脚本解决方案来避免大量的 GUI 点击。

使用 Team City REST API。

鉴于您的 Team City 部署在 http://dummyhost.com 并且您启用了具有系统管理员角色的来宾访问权限(否则只需从 guestAuth[=28 切换=] 到 URL 中的 httpAuth 并在请求中指定用户和密码,详细信息在文档中)你可以做下一步:

  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

查看完整文档here

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

这是一个 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"