6

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

我正在开发一个部署在 Heroku 上的网络应用程序。由于 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我的仓库中的master分支映射到登台服务器 Git 仓库上的分支。

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


建议的解决方案

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

如果推送到 4 个遥控器中的任何一个由于任何原因失败,我希望这个代理以某种方式报告回来,这样我就会知道有什么东西坏了并可以修复它。

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

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

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

4

2 回答 2

1

创建一个新的存储库,您可以在希望推送传播时推送到该存储库,并编写一个 post-receive 挂钩以在您推送到此存储库时传播更改。

于 2012-04-25T11:56:52.340 回答
0

这对我来说似乎有点疯狂。我在 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 层为您提供所需的东西。

于 2012-04-25T11:51:14.867 回答