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 持续集成机器人失败的主要内容,如果未能解决你的问题,请参考以下文章