多くのソースコードをgitに移行しており、現在のソリューションに非常に満足しています。同じシステムでサーバー設定ファイルのバージョンを管理したいのですが、希望どおりに機能しないものがいくつかあります。誰かが彼の経験をここで共有できることを願っています。
この質問は サーバー構成ファイルのリビジョン管理を使用していますか? に似ていますが、この質問の提案では機能しない特別な要件があります。
現在のセットアップでは、構成ファイルにSubversionを使用しています。対応するリポジトリは次のようになります
/#リポジトリのルート +-www.domain.com/#wwwの構成 | \-etc / | \-Apache2 / +-dev.domain.com/#dev の設定| +-etc / | \-opt / | \-app1/ | \-conf /#dev 上のapp1の設定\-staging.domain.com/#ステージングの設定
リポジトリのサブディレクトリをチェックアウトするだけで済むため、Subversionではこれで問題なく動作します。さらに、svn:externalsを使用して、いくつかの異なる構成設定の1つの共通構造を指すことができます。バージョン管理されたすべてのディレクトリにある。svnファイルを処理するだけで済みました。一方、Git svn:externalsがない および sparse checkouts では、ルートから実際のディレクトリへのパスが常に同じである必要があります。
Gitへの移行について説明するときに、サーバー構成のバージョン管理の主な要件を書き留めてみました。
すべての構成を1つのリポジトリーに入れて、作業コピーとしてサブパスのみを持たせる方法はありますか?現在、2つのアプローチを検討していますが、最初にこの質問をしたいと思います
構成ファイルの管理に単一のマシンでgitを使用することは問題ありませんが、私がそれを使用したい方法でそれを使用している人がいるはずだと思います。
ありがとうございました
カリーム
私は以前にこのようなものを使用しました。これがどのように機能したかです。
/etc/resolv.conf
など、すべてのマシンで同じファイルを保持するためのものです。これらは、現在「svn:externals」リポジトリに保持しているファイルです。git pull
するようにcronジョブを設定します。単一のマシンブランチでコードを変更するのは簡単です。開発環境の適切なブランチをgit checkout
だけ変更し、変更を中央リポジトリにコミットします。そのブランチのすべてのマシンは、次にcronジョブが実行されるときに自動的に変更を取得します。
モジュールブランチのコードの変更は、次の2つのステップからなるため、少しだけ注意が必要です。
git checkout
適切なモジュールブランチgit checkout
そのモジュールブランチを使用する各マシンブランチ。その後、モジュールブランチをそこにマージします。 gitは、以前にそのモジュールブランチをマージしたことがわかり、最後の共通の親以降に発生した変更にのみ気付くでしょう。この方法には利点と欠点の両方があります。 1つの利点は、モジュールブランチに変更を加え、それを必要とするマシンブランチに適用できることです。これにより、マシンブランチは準備が整うまで古いバージョンにとどまることができません。その場合の欠点は、モジュールブランチを、それを使用している可能性がある各マシンブランチに必ずマージする必要があることです。私は、コミットツリーをトラバースし、これを自動的にマージするスクリプトを使用していますが、それでも問題が発生する可能性があります。
別の方法として、新しいバージョンのgitは " submodules "と呼ばれるものをサポートしています:
サブモジュールを使用すると、常に特定のコミットを指すソースツリーの専用サブディレクトリ内に外部リポジトリを埋め込むことができます。
これにより、「svn:externals」ツリーのようなものを少し作成でき、今と同じように更新できます。
ここでちょっとしたコツですが、ポスト受信フックが仕事をするように聞こえます
レポマスターは/ var/masterに保存されます
フックはそれを/ var/localcloneに複製します
次に、ホスト固有の詳細をコピーします
各サーバーでローカルに.git/post-receiveフックを設定する必要があります(適切な設定を使用)
また、これよりもgitよりもパペットやシェフのようなものが必要なようですが、これによりgitを実行して構成とモジュールを一元管理し、puppet\chefでデプロイと検証を管理することができます
ここに私が考えた簡単な仕事があります
1。たとえば/var/repo
に中央リポジトリがあります
2。すべてのドメインにグローバルなファイルをそのディレクトリに置きます。
3。すべてのサブドメイン/var/repo/subdomain1
、/var/repo/subdomain2
などにブランチを作成します。
4。ブランチへのプッシュがマスターとマージされるポストフックを作成します。
したがって、/var/repo/subdomain2
の構成を変更すると、マスターとすぐにマージされるため、リポジトリを完全にプルしてすべての構成ファイルを取得できます
個々のサブドメイン構成をプルする場合は、適切なブランチをプルするだけです。
設定ファイルをどのように/var/repo/*
に入れるかは、まったく別の問題です(cronタブ、私は考えることができます)
〜$