コミット後のフックを使用して、コミットされたファイルをSVNからWebディレクトリにコピーするにはどうすればよいですか?
質問
UbuntuサーバーにApacheとSubversionがインストールされています。このサーバーは、純粋にテスト目的でのみ、ステージングサーバーとして使用します。 Apacheを使用してWebアプリケーションをホストし、Subversionを使用してソースコードのバージョン付きコピーを保持します。
現在のワークフロー:
- ファイルに変更を加える
- ファイルをSubversionリポジトリにコミットします
- SFTP経由で新しいファイルをApacheパブリックディレクトリにアップロードします
- Webブラウザで変更を表示する
ワークフローが次のようであれば、私はずっと幸せです:
- ファイルに変更を加える
- ファイルをSubversionリポジトリにコミットします
- バックグラウンドで、SubversionはコミットされたファイルのコピーをApacheパブリックディレクトリに置きます
- Webブラウザで変更を表示する
サーバー管理者の経験はほとんどありませんが、ヘルプやポインタはありがたいです。コミット後のフックが必要なものであり、これを行うためのbashスクリプトを書くことができると聞いたが、どこから始めればよいのかわからず、かなり多くのグーグルの後に実際には何も見つかりませんでした。
ありがとう!
解決
他のヒント
実行できますが、すべてのコミットを実稼働Webサイトに自動的にプッシュすることは常に良い考えとは限りません。他の変更が必要な場合があり、新しいコードが存在するためにサイトを破壊することもありますが、データベーススキーマはまだ更新されておらず、恥ずかしいです。
代わりに私がしがちなのは、サーバーにsvnのコピーをチェックアウトし、それから他のすべての準備ができたら、svn updateを行うことです。
しかし、本当に必要な場合は、コマンドをポストコミットトリガーに入れると、すべてが自動的に実行されます。これには、サーバーでの移行スクリプトの実行(この変更に対してスクリプトが存在する場合)が含まれ、発生する必要のあるコード以外の変更を処理します。
本物の、あなたが自問するべき包括的な質問だと思います---もちろんあなたはすでに自問しているかもしれません---これは:"どうすればコードを最も簡単にテストできますか?展開する前に?"
良い答えは、開発ボックスにApacheをインストールし、 / home / richardhenry / src / mywebsite
にwebrootまたはcgiパス、あるいはその両方を使用して独自のユーザーとして実行することです。コードをチェックアウトします。)
これにより、コミットすることなくコードをテストできます。その結果、壊れたコミットや無駄なコミットでトランクが散らかることはありません。一般に、独立したものを独立させることは、良いアイデア(TM)になる傾向があります。
別の方法として、rsyncを使用してWebサーバーを作業ディレクトリと同期するか、ファイルをdevボックスからステージングサーバーにプッシュするスクリプトを記述し、スクリプトを実行する(またはrsyncを呼び出す)Makefileルールを追加します。 本当におしゃれになりたい場合は、inotifyまたはその他のファイル通知モニターを使用して、スクリプトを自動的に実行してください。