6

誰かが構築したソフトウェアを探しています。誰かがこのようなことを聞​​いて、私を正しい方向に向けることができることを期待して、ここでこのソフトウェアについて説明します。

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 がこのようなプロキシを必要とするように設計されているのはかなり悲しいことですが、それは私が対処しなければならないことです。)

それだけです。それが私が望む解決策です。そのようなプログラムを知っている人はいますか?

4

2 に答える 2

1

プッシュを伝播するときにプッシュできる新しいリポジトリを作成し、このリポジトリにプッシュするときに変更を伝播するための post-receive フックを記述します。

于 2012-04-25T11:56:52.340 に答える
0

これは私には少しクレイジーに思えます。Heroku には、異なる環境を実行する複数のアプリがあります。1 つの Github リポジトリと、異なる環境用の Heroku リモートがあります。また、Heroku リモートの 1 つに一致する Git ブランチを維持する傾向もあります。

その後、展開は(ジョンが言うように)次のように行われます。

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 に答える