首页 文章

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

提问于
浏览
5

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

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

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

提前致谢 .

4 回答

  • 6

    使用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

  • 2

    您可以暂停构建队列 . 见this video . 这样你就不需要让TC停下来了 .

    对于特定于代理的升级,'s best to disable only the agent you'正在进行中 . 见here .

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

  • 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"
    

相关问题