【发布时间】:2017-01-16 07:34:49
【问题描述】:
我想问有没有什么办法可以通过运行脚本来禁用所有 TeamCity 项目的构建触发器?
我有一个场景,我需要禁用所有构建触发器以阻止构建运行。这是因为有时,我可能需要在构建代理机器上执行一些升级过程,这需要一天以上的时间。
我不希望为每个不同 TeamCity 项目的每个构建触发器手动单击禁用按钮。有没有办法自动化这个过程?
提前致谢。
【问题讨论】:
标签: teamcity
我想问有没有什么办法可以通过运行脚本来禁用所有 TeamCity 项目的构建触发器?
我有一个场景,我需要禁用所有构建触发器以阻止构建运行。这是因为有时,我可能需要在构建代理机器上执行一些升级过程,这需要一天以上的时间。
我不希望为每个不同 TeamCity 项目的每个构建触发器手动单击禁用按钮。有没有办法自动化这个过程?
提前致谢。
【问题讨论】:
标签: teamcity
使用 Team City REST API。
鉴于您的 Team City 部署在 http://dummyhost.com 并且您启用了系统管理员角色的访客访问(否则只需从 guestAuth 切换到 httpAuth 在 URL 中并在请求中指定带有密码的用户,详细信息在文档中)您可以下一步:
GET http://dummyhost.com/guestAuth/app/rest/buildTypes/
GET http://dummyhost.com/guestAuth/app/rest/buildTypes/id:***YOUR_BUILD_CONFIGID***/triggers/
PUT http://dummyhost.com/guestAuth/app/rest/buildTypes/id:***YOUR_BUILD_CONFIGID***/triggers/***YOUR_TRIGGER_ID***/disabled
查看完整文档here
【讨论】:
HTTP Status 405 - Request method 'PUT' not supported。登录后,PUT'ing 到提到的 URL 就像魅力一样。
您可以暂停构建队列。见this video。这样你根本不需要接触构建配置;你只是让 TC 停下来。
对于特定于代理的升级,最好只禁用您正在使用的代理。见here。
这些都不是你问的“通过运行脚本”,但我认为你只是要求一个脚本解决方案以避免大量的 GUI 点击。
【讨论】:
另一种解决方案可能是简单地禁用代理,这样就不会再运行构建了。
【讨论】:
这是一个 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"
【讨论】: