誰かが構築したソフトウェアを探しています。誰かがこのようなことを聞いて、私を正しい方向に向けることができることを期待して、ここでこのソフトウェアについて説明します。
Heroku にデプロイされた Web アプリを開発しています。Heroku の制限により、同じリポジトリに対して 4 つのリモート Git リポジトリが存在するという不幸な状況に陥っています。
なぜ4つ?
Heroku には複数の「アプリ」があります。1 つは本番用で、2 つのステージング「アプリ」。これらはすべて同じ実際のアプリ用ですが、Heroku では別の「アプリ」であるため、本番環境にプッシュする前にステージングで試してみることができます。
Heroku 上の各アプリは独自の個別の Git リポジトリを取得しmaster
、新しいコミットがそのブランチにプッシュされるたびに、そのブランチを自動的にデプロイしmaster
ます。Heroku のこのポリシーは、私たちの問題の核心です。これは、Heroku に 3 つの異なるリポジトリと、GitHub リポジトリがあることを意味するためです。
4 つの異なる Git リモートを使用すると問題になるのはなぜですか? これは、新しいコミットを開発して作成するときに、(1) 1 つのリモートのみにプッシュするか、(2) すべてのリモートにプッシュする必要があることを意味するためです。
(1) を行うということは、どのリモートにプッシュしたいかを考えることを意味します。私はこれについて考えるのが嫌いです。私が開発するときは、リモートは気にせず、コミットしてプッシュし、仕事に戻ります。たとえば、ブランチをステージング サーバー 1 にデプロイする場合は、そのブランチをブランチにマージしてstaging_1
プッシュします。プッシュ先のリモコンを選ぶのは好きではありません。
(1) のもう 1 つの欠点は、リモコンが同期しなくなることです。
私が欲しいのは(2)です。すべてのプッシュ アクションが 4 つのリポジトリすべてにプッシュされるようにします。
しかし、それには2つの問題があります:
問題 1: Heroku のステージング「アプリ」が、現在の状態をデプロイしmaster
ます。私は彼らにそれをしてほしくありません。staging_1
リポジトリのmaster
ブランチをステージング サーバーの Git リポジトリのブランチにマッピングしたいと考えています。
問題 2: コンピューターを 4 つのリポジトリすべてにプッシュすると、時間がかかります。Heroku の 1 回のプッシュ操作でも時間がかかります。場合によっては 40 秒かかることもあります。
提案された解決策
これが私が欲しいものです。プロキシとして機能する専用の Git サーバーが必要です。ローカル コンピューターからこの Git サーバーにプッシュするたびに、同じブランチが 4 つのリポジトリに並行してプッシュされます。このように、ローカル コンピューターの観点からは、プッシュは瞬時に行われるように見えますが、このプロキシ サーバーはバックグラウンドで Heroku リポジトリを自動的に処理します。
4 つのリモートのいずれかへのプッシュが何らかの理由で失敗した場合、このプロキシが何らかの方法でレポートを返してくれるようにして、何かが壊れていることを認識して修正できるようにします。
このプロキシが行う必要があるもう 1 つのことは、master
マッピングです。staging_1
ブランチをプッシュするたびにstaging_1
、すべてのリモートにプッシュしますが、ステージングサーバーに属するリモートにもそのブランチをプッシュするmaster
ため、Heroku はそれをデプロイすることを認識します。
(Heroku がこのようなプロキシを必要とするように設計されているのはかなり悲しいことですが、それは私が対処しなければならないことです。)
それだけです。それが私が望む解決策です。そのようなプログラムを知っている人はいますか?