我想问有没有办法通过运行脚本来禁用所有TeamCity项目的构建触发器?
我有一个场景,我需要禁用所有构建触发器,以防止构建运行 . 这是因为有时候,我可能需要在构建代理计算机上执行一些升级过程,这将需要一天以上的时间 .
我不希望在每个不同的TeamCity项目上为每个构建触发器手动单击“禁用”按钮 . 有没有办法自动化这个过程?
提前致谢 .
使用Team City REST API .
鉴于您的Team City部署在http://dummyhost.com并且您启用了具有系统管理员角色的访客访问权限(否则只需从URL中的guestAuth切换到httpAuth并在请求中指定具有密码的用户,详细信息在文档中)您可以执行下一步:
获取所有构建配置 GET http://dummyhost.com/guestAuth/app/rest/buildTypes/
GET http://dummyhost.com/guestAuth/app/rest/buildTypes/
对于每个构建配置获取所有触发器 GET http://dummyhost.com/guestAuth/app/rest/buildTypes/id:***YOUR_BUILD_CONFIGID***/triggers/
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
PUT http://dummyhost.com/guestAuth/app/rest/buildTypes/id:***YOUR_BUILD_CONFIGID***/triggers/***YOUR_TRIGGER_ID***/disabled
查看完整文档here
您可以暂停构建队列 . 见this video . 这样你就不需要让TC停下来了 .
对于特定于代理的升级,'s best to disable only the agent you'正在进行中 . 见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"
4 回答
使用Team City REST API .
鉴于您的Team City部署在http://dummyhost.com并且您启用了具有系统管理员角色的访客访问权限(否则只需从URL中的guestAuth切换到httpAuth并在请求中指定具有密码的用户,详细信息在文档中)您可以执行下一步:
获取所有构建配置
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
您可以暂停构建队列 . 见this video . 这样你就不需要让TC停下来了 .
对于特定于代理的升级,'s best to disable only the agent you'正在进行中 . 见here .
根据你的要求,这些都不是“通过运行脚本”,但我认为你只需要一个脚本化的解决方案来避免大量的GUI点击 .
另一种解决方案可能是简单地禁用代理,因此不再运行构建 .
这是一个bash脚本,通过TeamCity REST API按项目名称模式批量暂停所有(仍然没有暂停)构建配置: