我正在寻找一个我希望有人建立的软件。我将在这里描述这个软件,希望有人听到这样的话,并指出我正确的方向。
我正在开发一个部署在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
分支映射到登台服务器Git仓库上的master
分支。
问题2:让我的电脑推送到所有4个回购将需要长时间。即使1个Heroku推动动作也需要很长时间。有时可能需要40秒。
这就是我想要的。我想有一个专门的Git服务器充当代理。每当我从本地计算机推送到这个Git服务器时,它会将这些相同的分支推入我们的4个回收站并行。通过这种方式,从我本地计算机的角度来看,推送似乎是即时的,而这个代理服务器将自动在后台处理Heroku存储库。
如果推送到4个遥控器中的任何一个因任何原因而失败,我希望这个代理以某种方式报告,这样我就会知道某些内容已被破坏并可以修复它。
此代理必须做的另一件事是master
映射。每次我将staging_1
分支推送到它时,它会将它作为staging_1
推送到所有远程控制器,但是对于属于登台服务器的远程控制器,它也会将该分支推送到{{1所以Heroku会知道要部署它。
(Heroku的设计方式让我需要像这样的代理,这真是令人难过,但这就是我必须处理的事情。)
就是这样。这是我想要的解决方案。有谁知道这样的节目?
答案 0 :(得分:1)
创建一个新的存储库,您可以在希望推送传播时将其推送到该存储库,并在您推入此存储库时编写一个post-receive挂钩以传播更改。
答案 1 :(得分: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。