推送到多个远程的 Git 代理

  • 本文关键字:Git 代理 git heroku proxy
  • 更新时间 :
  • 英文 :


我正在寻找一个我希望有人构建的软件。我将在这里描述这个软件,希望有人听说过这样的事情,并可以为我指出正确的方向。

我正在开发一个部署在 Heroku 上的 Web 应用程序。由于 Heroku 的局限性,我被置于为同一存储库提供四 (4) 个远程 Git 存储库的不幸境地。

为什么是四个?

我们在Heroku上有多个"应用程序"。一个用于生产和几个暂存"应用程序"。这些都是针对同一个实际应用程序,但在 Heroku 上它们是单独的"应用程序",因此我们可以在将它们推送到生产环境之前尝试暂存。

Heroku 上的每个应用程序都会获得自己单独的 Git 存储库,并在每次将新提交推送到该master分支时自动部署master分支。Heroku的这一政策是我们问题的症结所在。因为这意味着我们在 Heroku 上有 3 个不同的存储库,以及我们的 GitHub 存储库。

为什么有 4 个不同的 Git 遥控器有问题?因为这意味着当您开发和创建新提交时,您必须 (1) 推送到一个远程或 (2) 推送到所有远程。

执行 (1) 意味着考虑要推送到哪个遥控器。我讨厌不得不考虑这个。当我开发时,我不关心遥控器,我承诺并推动并重新开始工作。例如,如果我想将分支部署到暂存服务器 1 中,我会将该分支合并到staging_1分支中并推送它。我不喜欢选择要推送到哪个遥控器。

(1) 的另一个缺点是您的遥控器不同步。

我想要的是(2)。我希望每个推送操作都推送到我们所有的四个存储库。

但是这有两个问题:

问题 1:Heroku 上的暂存"应用程序"部署了master上的内容。我不希望他们那样做。我想将存储库中的staging_1分支映射到暂存服务器 Git 存储库上的master分支。

问题 2:将我的计算机推送到所有 4 个存储库将花费很长时间。即使是 1 个 Heroku 推送动作也需要很长时间。有时可能需要 40 秒。


建议的解决方案

这就是我想要的。我想要一个专门的 Git 服务器作为代理。每当我从本地计算机推送到这个 Git 服务器时,它都会将这些相同的分支并行推送到我们的 4 个存储库中。这样,从我的本地计算机的角度来看,推送似乎是即时的,而这个代理服务器将在后台自动处理 Heroku 存储库。

如果推送到 4 个遥控器中的任何一个因任何原因失败,我希望此代理以某种方式报告,以便我知道某些东西已损坏并可以修复它。

此代理必须做的另一件事是master映射。每次我将staging_1分支推送到它时,它都会将其staging_1推送到所有远程,但对于属于暂存服务器的远程,它也会将该分支推送为master,因此 Heroku 会知道部署它。

(很遗憾,Heroku的设计方式使我需要这样的代理,但这就是我必须处理的。

就是这样。这就是我想要的解决方案。有谁知道这样的程序?

创建一个新的存储库,您可以在希望推送传播时推送到该存储库,并编写一个接收后钩子以在推送到此存储库时传播更改。

对我来说似乎有点疯狂。 我在 Heroku 上有多个运行不同环境的应用程序。 我有一个Github存储库,然后是用于不同环境的Heroku远程。 我也倾向于维护一个与 Heroku 遥控器之一匹配的 Git 分支。

然后(如 John 所说)使用以下方法完成部署:

git push heroku_remote local_branch:master

我在这里记录了这个基本方法:

http://neilmiddleton.com/deploying-topic-branches-to-heroku/

但是,据我所知,您需要完全自动化。 您可以使用TDDium等服务为您执行此类操作,监视Git分支,然后在测试套件通过时推送到远程分支(例如Heroku远程)。

http://neilmiddleton.com/continuous-deployment-with-heroku/

我很确定TDDium方法将为您提供所需的内容,以及额外的CI层。

最新更新