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

时间:2017-01-16 07:34:50

标签: teamcity

我想问一下,有没有办法通过运行脚本来禁用所有TeamCity项目的构建触发器?

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

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

提前致谢。

4 个答案:

答案 0 :(得分:6)

使用Team City REST API。

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

  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
  4. 请参阅完整文档here

答案 1 :(得分:3)

您可以暂停构建队列。见this video。这样您根本无需触摸构建配置;你只是让TC暂停了。

对于特定于代理的升级,最好只禁用您正在处理的代理。请参阅here

根据你的要求,这些都不是“通过运行脚本”,但我认为你只需要一个脚本化的解决方案来避免大量的GUI点击。

答案 2 :(得分:0)

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

答案 3 :(得分: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"