如何在 Xcode 7 中一次删除多个集成?

How do I delete multiple integrations at once in Xcode 7?

我们 运行 在 CI 服务器 (!) 上的磁盘 space 不足,因此决定清理一些较旧的集成。但是,我找不到在报告导航器中进行 multi-select 集成的方法。这可能吗?

(我想可能有一种方法可以通过 unofficial API,但我不想这样做)

据我所知,只能一个一个删除集成。您可以通过首先获取机器人列表 (GET /api/bots),找到您的机器人的 _id(我们称之为 BOT_ID)然后获取其集成列表(GET /api/bots/BOT_ID/integrations) 并仅收集他们的 ID 和版本。

然后,您可以迭代并调用每个集成 DELETE /api/integrations/INTEGRATION_ID/REV_ID

您调用这些 API 的方式是例如curl -k -u USER:PASS https://localhost:20343/api/...,所以要让所有机器人 运行 curl -k -u USER:PASS https://localhost:20343/api/bots

在此文件中查看更多详细信息:/Applications/Xcode.app/Contents/Developer/usr/share/xcs/xcsd/routes/routes_integration.js

如果您想了解更多关于 XCS 内部的信息,我构建了一个 Swift SDK:https://github.com/czechboy0/XcodeServerSDK and wrote about the internals in http://honzadvorsky.com/articles/2015-05-04-under-the-hood-of-xcode-server/

我的磁盘 space 运行 也有问题。我最初认为集成是罪魁祸首并手动删除了其中的大部分,但回收的磁盘 space 对消耗的内容并不重要。 人们会认为删除所有集成应该将磁盘 space 回收到一个点,就好像从来没有集成 运行 一样。但在删除集成后并没有发生这种情况。 然后根据阅读 Honza 的博客(czechboy 来自上面的评论)查看 Xcode 服务器内部结构时,我发现磁盘 space 被

/Library/Developer/XcodeServer/Integration/Caches是罪魁祸首。

删除它,我能够回收整个磁盘 space,就好像 Xcode 服务器上没有任何集成 运行 一样。 当您 运行 机器人并添加新机器人时,会重新创建其中的文件夹。然而,删除机器人似乎并没有删除相应的缓存文件夹。 在我们的例子中,我们为任何需要构建的分支创建机器人。随着时间的推移,该文件夹确实最终占据了最大的磁盘块 space。

我们目前的解决方案

  • python 脚本调用 Xcode 服务器 api 删除所有集成。集成产品都是备份的,所以保留单个集成没有太大价值。
  • bash 删除缓存文件夹的脚本。

目前两者都是 运行 手动。稍后我们可能会 运行 每两周一次。

Honza 在拆解 Xcode 服务器方面做得很好。在我进行设置时,他的博客是最有用的读物​​。请务必完整阅读他的博客。这是您在 Xcode 服务器上工作的 Apple 开发团队所期望的那种技术信息,但是 Apple 文档的缺乏令人震惊。