コミットするたびに、SVNからFTPを使用してリモートサーバーにPhpをデプロイするためのソリューションが見つかりません。追加または編集されたファイルのみをFTPでサーバーにアップロードし、削除されたファイルをSVNから削除するにはどうすればよいですか?コミット後のスクリプトを作成することを考えています...
9 に答える
良い質問!
そのようにファイルを同期するためのPHPのみのアプローチが存在するかどうかはわかりません。
rsync
私は通常、またはScriptFTP (商用) のようなサードパーティの FTP 同期ツールを使用して、同期部分を実行します。
phingを調べてください。これには多くの FTP 拡張機能 (「タスク」と呼ばれます) があります。しかし、私は彼らとの実際の経験はありません。
このブログ投稿では、多くのアイデアとアプローチを紹介しています。 ping を使用してファイルを共有ホスティングと同期する
svn2webを使用して、コミットされたすべてのファイルを Ftp 経由でサーバーにアップロードできます。Svn2web は、svn フックとして使用できる php スクリプトのコレクションです。ftp-server のアドレス、ユーザー名、およびパスワードをディレクトリの svn プロパティとして設定できます。よく働く!
私はhttp://svn2ftp.comを使用しています。これはSVNホストであり、コミットごとにS/FTPへのリモート展開を可能にします。
自分でスクリプトを管理したくないが、機能するものが必要な場合は、ホストされたサービスを使用してみてください。私はDeployを使用します。これは、説明したシナリオで完全に機能します。また、デプロイするプロジェクトが 1 つしかない場合でも無料です。
私たちの php プロジェクトでは、継続的インテグレーション ツールである Jenkins を使用しています。私たちのリポジトリ サーバーは Subversion です。コードを変更するたびに、jenkins ジョブを使用してベータ ステージングおよびライブ環境とマージし、アプリケーションをデプロイします。
http://www.michaelpeacock.co.uk/blog/entry/jenkins-ci-an-introduction-for-php-developersで、Jenkins を使用した PHP アプリケーションのデプロイに関する詳細情報を見つけることができます。
Beanstalkを調べましたか?ワンクリックでSubversionおよびGitプロジェクトをFTPサーバーにデプロイできます。しかし、それは無料ではありません。もう1つの無料の代替手段は、デプロイメントを実行するためにrakeスクリプトを実行する継続的インテグレーションサーバーをセットアップすることです。
mybe cron + svn up になる bash スクリプトは?
SVN から自分のサーバーにチェックアウトし (SVN から運用サーバーに作業コピーを作成します)、新しいバージョンをデプロイするときはいつでも、SSH 経由でサーバーに接続し、次のように入力しますsvn update
。編集された最新のファイルのみがデプロイされ、1 秒もかからずに本番環境で最新バージョンが更新されます。
最善の方法は (サーバーが Linux ベースの場合) SVN エクスポートを新しいディレクトリに作成し、新しいディレクトリを移動して古いディレクトリを置き換えることです (これを行う最善の方法は、サイトの異なるバージョンへのシンボリック リンクを使用することです)。この方法では、サイトが 1 秒か 2 秒使用できなくなりますが、rsync を使用してサイトが大きい場合、1 つのファイルを大幅に変更すると、すべてのファイルが同期するまでサイトが壊れてしまいます。
このプロシージャの起動に関しては、svn フックを使用するのが最善の方法です。また、リリースする前に(基本機能のために)自動テストを行うことを検討してください。これは、トランクがかなりひどく壊れて、サイトが間違いなくダウンする可能性があるためです:)
現在、上記のアプローチを本番環境に組み込んでおり、セットアップは次のとおりです。
- コミットはトランクに入ります
- 実際にコミットされる前に、コードに対してテストが実行され、すべてが機能するかどうかが確認されます
- いくつかのコミットの後、デプロイが行われます (通常は開発者が監督します)
- テストが再度実行されます
- それらが成功した場合 - すべてOK
- 失敗した場合、古いエクスポートが返され、サイトは再び完全に機能します
標準のコンソール コマンドを使用して、すべて PHP で記述されています。