Git 强制推送后 Xcode 持续集成机器人失败

Posted

技术标签:

【中文标题】Git 强制推送后 Xcode 持续集成机器人失败【英文标题】:Xcode Continuous Integration bot fails after Git force push 【发布时间】:2014-01-28 16:01:22 【问题描述】:

我们有一个 Xcode CI 机器人设置来轮询我们的 git 存储库以获取新的提交并相应地构建。一般来说,它运行良好。然而,在强制推送之后(我知道),机器人将失败并且永远不会再次正确构建。解决方案是删除机器人并重新开始(并告诫自己强制推送)。

在 Xcode 构建日志中没有错误,点击控制台我们只能确认问题所在(参见最后的日志)...

Jan 28 08:15:51 macmini.local xcsbuildd[80853]: [CSBotSCMAction gitCloneRepositoryAtURL:branch:destinationPath:createDirectoryNamed:completionBlock:] : https://github.com/XXXXXXXX/ios.git
Jan 28 08:15:51 macmini.local xcsbuildd[80853]: newRepoURL: https://github.com/XXXXXXXX/iOS.git
    "https:\/\/githubuserformacmini@github.com\/XXXXXXXX\/iOS.git",
    "https_github_com_XXXXXXXX_iOS_git"
  "launchCommand" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git clone https:\/\/githubuserformacmini@github.com\/XXXXXXXX\/iOS.git --recursive --verbose --progress https_github_com_XXXXXXXX_iOS_git",
  "launchPath" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git",
    "GIT_ASKPASS" : "\/Applications\/Server.app\/Contents\/ServerRoot\/usr\/libexec\/xcs_ssh_auth_agent",
Jan 28 08:18:29 macmini.local xcsbuildd[80853]: Obtaining the HEAD hash at: /Library/Server/Xcode/Data/BotRuns/BotRun-187dbc1a-dae2-4ddc-a75b-75831de7ff09.bundle/tmp/https_github_com_XXXXXXXX_iOS_git
Jan 28 08:18:29 macmini.local xcsbuildd[80853]: [CSBotSCMAction gitHeadHashesRepositoryAtPath:branch:completionBlock:] : /Library/Server/Xcode/Data/BotRuns/BotRun-187dbc1a-dae2-4ddc-a75b-75831de7ff09.bundle/tmp/https_github_com_XXXXXXXX_iOS_git
Jan 28 08:18:29 macmini.local xcsbuildd[80853]: newRepoURL: file:///Library/Server/Xcode/Data/BotRuns/BotRun-187dbc1a-dae2-4ddc-a75b-75831de7ff09.bundle/tmp/https_github_com_XXXXXXXX_iOS_git/
  "launchCommand" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git show-ref --heads",
  "launchPath" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git",
  "currentDirectoryPath" : "\/Library\/Server\/Xcode\/Data\/BotRuns\/BotRun-187dbc1a-dae2-4ddc-a75b-75831de7ff09.bundle\/tmp\/https_github_com_XXXXXXXX_iOS_git",
  "launchCommand" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git checkout release",
  "launchPath" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git",
    "GIT_ASKPASS" : "\/Applications\/Server.app\/Contents\/ServerRoot\/usr\/libexec\/xcs_ssh_auth_agent",
  "currentDirectoryPath" : "\/Library\/Server\/Xcode\/Data\/BotRuns\/BotRun-187dbc1a-dae2-4ddc-a75b-75831de7ff09.bundle\/tmp\/https_github_com_XXXXXXXX_iOS_git",
Jan 28 08:18:29 macmini.local xcsbuildd[80853]: [CSBotSCMAction gitHeadHashesRepositoryAtPath:branch:completionBlock:] : https://github.com/XXXXXXXX/iOS.git
Jan 28 08:18:29 macmini.local xcsbuildd[80853]: newRepoURL: https://github.com/XXXXXXXX/iOS.git
    "https:\/\/githubuserformacmini@github.com\/XXXXXXXX\/iOS.git"
  "launchCommand" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git ls-remote --heads https:\/\/githubuserformacmini@github.com\/XXXXXXXX\/iOS.git",
  "launchPath" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git",
    "GIT_ASKPASS" : "\/Applications\/Server.app\/Contents\/ServerRoot\/usr\/libexec\/xcs_ssh_auth_agent",
Jan 28 08:18:30 macmini.local xcsbuildd[80853]: [CSBotSCMAction gitCommitSummaryForRepositoryURL:betweenHashIdentifier:andHashIdentifier:completionBlock:] : /Library/Server/Xcode/Data/BotRuns/BotRun-187dbc1a-dae2-4ddc-a75b-75831de7ff09.bundle/tmp/https_github_com_XXXXXXXX_iOS_git
  "launchCommand" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git log --no-color --name-status --format=fuller --date=iso e478616e4b3915846f7938fec24e8dc12cdae52a..f2c1b24a6b801ed9f7e60dce60add1851618da64",
  "launchPath" : "\/Applications\/Xcode.app\/Contents\/Developer\/usr\/bin\/git",
    "GIT_ASKPASS" : "\/Applications\/Server.app\/Contents\/ServerRoot\/usr\/libexec\/xcs_ssh_auth_agent",
  "currentDirectoryPath" : "\/Library\/Server\/Xcode\/Data\/BotRuns\/BotRun-187dbc1a-dae2-4ddc-a75b-75831de7ff09.bundle\/tmp\/https_github_com_XXXXXXXX_iOS_git",
Jan 28 08:18:30 macmini.local xcsbuildd[80853]: [XCSCheckoutOperation.m:1033 7d02a310 +168ms] Error getting Git commit log in range e478616e4b3915846f7938fec24e8dc12cdae52a:f2c1b24a6b801ed9f7e60dce60add1851618da64 <stderr>= fatal: Invalid revision range e478616e4b3915846f7938fec24e8dc12cdae52a..f2c1b24a6b801ed9f7e60dce60add1851618da64
Jan 28 08:18:30 macmini.local xcsbuildd[80853]: [XCSCheckoutOperation.m:610 7d02a310 +0ms] Failed to get Git commit history for repo with error Error Domain=CSBotSCMAction Code=-1000 "fatal: Invalid revision range e478616e4b3915846f7938fec24e8dc12cdae52a..f2c1b24a6b801ed9f7e60dce60add1851618da64

我可以看到...

git log --no-color --name-status --format=fuller --date=iso e478616e4b3915846f7938fec24e8dc12cdae52a..f2c1b24a6b801ed9f7e60dce60add1851618da64

...来自集成。 e478616e4b3915846f7938fec24e8dc12cdae52a 是当我强制进入 f2c1b24a6b801ed9f7e60dce60add1851618da64 时被删除的提交(我假设)。我不知道机器人将这些信息保存在哪里。我尝试从 /Library/Server/Xcode/Data/BotRuns 中删除所有内容,但没有成功。我想也许它正在从 /Library/Server/Xcode/Data/BotRuns/Latest 中提取最后一个哈希,不。我还在 /Library/Server/Xcode 中挖掘了大量其他目录,但没有看到任何内容。

如果 Xcode 的 CI 方法让我们能够控制 git 工作流程,那就太好了。配置选项的数量非常少。也许删除是唯一的方法。

【问题讨论】:

Git 通过运行 post-receive 挂钩获取此信息。如果您可以发布post-receive 挂钩代码,那么也许有人可以提供帮助。 不幸的是,在接收后挂钩中发生的所有事情都被编译并锁定在 CSBotSCMAction 类下的某些应用程序中(至少这是我可以从日志中收集的内容)。谢谢。 【参考方案1】:

似乎有人删除了已经推送到远程的提交。大多数 CI 服务器使用以下基本工作流程检测存储库中的更改:

    从远程获取 执行 git log 或 diff,其中起始提交是克隆存储库的当前 HEAD,最终提交是克隆存储库正在跟踪的远程分支的当前 HEAD

如果当前签出分支的 HEAD 在远程仓库中被移除,Git 可能会失败。

您也许可以转到 CI 构建已签出 Git 存储库的目录并执行以下操作:

git reset --hard origin/branch_name

这将使您的本地和远程分支恢复平价。然后您可能需要开始手动构建。

真正的答案是当那些提交已经被推送到远程时,不要改变 Git 的提交历史。

【讨论】:

嗨,格雷格,绝对是这样。并且通过“大多数 CI 服务器”,您需要记住它是 Apple,在这种情况下,他们可能有自己的方法更好,而且肯定更差。存储库的位置也很模糊,位于几个锁定的目录后面。有足够多的警告信号告诉我我可能不应该在那里。 我明白了。很公平:) @rob5408,平心而论,有权限确保您不会随意进入那里。这并不意味着您至少不应该访问它们。进入这些目录可能会让您深入了解这个问题和其他问题。

以上是关于Git 强制推送后 Xcode 持续集成机器人失败的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Bots Server 持续集成失败

与 Xcode Bot 的持续集成

内部服务器错误 Xcode 持续集成

iPhone 4s 设备中的 XCTest 持续集成失败

如何为 Xcode 持续集成配置电子邮件设置

有没有办法强制 Xcode 机器人进行干净的结帐?