旧来のデプロイ
- FTPで手動アップロード
- ヒューマンエラーが出やすくなる
- 最新の状態がレポジトリとズレる
- 独自スクリプトで自動化
- スクリプトのメンテナンスが大変になる
- 作った人がいなくなるとよくわからなくなる
そこで
- Capistranoを使う
- 最も使われていると思われるデプロイツール(Ruby製)
- 簡単な手順なら設定だけでデプロイを自動化できる
- でも、ComposerやPHPUnitを実行するにはカスタムタスクが必要
- カスタムタスクはRubyで書く(そんなに難しくはないけど)
- (PHPプロジェクトにこっそり導入するとチーム内で文句が出そう)
PHPプロジェクト向けに特化したCapistranoっぽいツールはないの?
Rocketeerのデプロイイメージ
- 手元(ローカル)で発射ボタンを押す(コマンドを打つ)
- ミサイル(レポジトリのソース)が飛ぶ
- 遠隔地(リモート)に着弾(デプロイ)する
精度の高い弾道ミサイルみたいな感じ?
同名のSF漫画もあったみたいです。http://bit.ly/1fc8wAi
(ウ◯トラマン)
具体的には
- デプロイ先にSSHでログイン
- 実行したいカスタムタスクがあれば、実行 (before deploy)
- git clone (サブモジュール含む)
- composer install (composer.lockはバージョン管理しておきましょう)
- PHPUnitを実行したければ、実行。失敗したらデプロイ中止
- ログディレクトリ等のパーミッションを調整
- ログディレクトリ等、デプロイを跨いでの共有化
- 実行したいカスタムタスクがあれば、実行 (before symlink)
カスタムタスクが false を返せばデプロイ中止(v1.1から)
grunt + jasmine とか組み込めます
- symlink を張り替えて、デプロイ完了
- 実行したいカスタムタスクがあれば、実行 (after deploy)
このタイミングで grunt + jasmine とかやってもデプロイは既に完了しているのであまり意味無いです
FuelPHPでRocketeer
下準備
ローカルでやっておくこと
- php.ini で "phar.readonly = Off"
- デプロイしたいFuelPHPプロジェクトをGitHubやBitbucketにコミット
リモート(デプロイ先)でやっておくこと
- Git, PHP(とmcrypt extension), Composerのインストール
(Composer はプロジェクト直下の composer.phar でも良いかも)
- ~/.ssh/config に "StrictHostKeyChecking no"
(あるいは、一度手動でcloneして、ホストの登録をしておく)
- デプロイ先のpublicディレクトリへのsymlink
RocketeerのDLと設定ファイルの生成
- http://rocketeer.autopergamene.eu/versions/rocketeer.phar から rocketeer.phar をDL
(rocketeer.phar は自身に認証情報をキャッシュするので .gitignore でバージョン管理しないようにした方が良いかも)
- コマンドで "php rocketeer.phar ignite" と打ち、設定ファイルを生成
以下の設定ファイルが生成されます。(rocketeer/tasks.phpを除く)
- .rocketeer/config.php ... リモートの接続情報等を設定する
- .rocketeer/hooks.php ... 今日のデモでは使っていません
- .rocketeer/paths.php ... PHP, PHPUnit, Composer 等のパスを設定する
- .rocketeer/remote.php ... デプロイに関する様々な設定をする
- .rocketeer/scm.php ... レポジトリの設定をする
- .rocketeer/stages.php ... 今日のデモでは使っていません
- .rocketeer/tasks.php ... カスタムタスクを登録する
これらの設定ファイルとカスタムタスクを組み合わせてデプロイします