2017-01-16 91 views
3

我想问,是否有任何方法通过运行脚本来禁用所有TeamCity项目的构建触发器?TeamCity:为所有TeamCity项目禁用构建触发器

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

我不想为每个不同的TeamCity项目上的每个构建触发器手动单击Disable按钮。有没有办法让这个过程自动化?

在此先感谢。

回答

3

使用Team City REST API。

鉴于你的团队市部署在http://dummyhost.com和你启用了系统管理员角色的来宾访问(否则从只需切换guestAuthhttpAuth的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

查看完整的文档here

+0

真棒!非常感谢你的回复。这正是我使用TeamCity RestAPI所寻找的。 – IAMbeginner

+0

注意:如果没有授权(例如通过httpAuth),TeamCity版本10的错误消息是'HTTP状态405 - 请求方法'不支持'。登录后,按照提到的URL工作就像魅力。 – Izmaki

+0

感谢您的提示。这里是适当的授权工作脚本实例:http://stackoverflow.com/a/43998789/603516 – Vadzim

2

您可以暂停构建队列。请参阅this video。这样你根本不需要触摸构建配置;你只是让TC停下来。

对于特定于代理程序的升级,最好仅禁用正在处理的代理程序。见here

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

+0

感谢您的答复。您是对的,我正在寻找可以自动执行此手动过程的脚本化解决方案。有没有什么方法可以开发一个脚本来获取保存构建触发器设置的xml标记并将其更改为禁用触发器?只是好奇 – IAMbeginner

0

另一种解决方案可能是简单地禁用代理,所以没有更多的建立将运行。

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"