一度、資格情報が正しくセットアップされたら、いよいよあなたのプロジェクトをデプロイするときです。
もし、これがサーバへの最初のデプロイであれば、rocketeer deploy
コマンドを呼びましょう。初回時のためのサーバセットアップとデプロイを実行してくれます。あなたのサーバ上のプロジェクトは、どのストラテジーを取っているかによって、クローンまたはrsyncされます。
次のようなフラグを使うことで、特定のサーバやステージに限定してデプロイすることが可能です。
$ rocketeer deploy
$ rocketeer deploy --on="staging,production"
$ rocketeer deploy --on="production" --stage="staging"
一度、最初のリリースが正常にセットアップされれば、スピードアップのためにタスクの 更新(update) を選択できるようになります。これは、新しいリリースを作らず単純に今のものを更新します。
$ rocketeer update
上記(のdeploy)と同じオプションを使うことができます。例として、もし クローン ストラテジーをとっていれば、現在のリリースに対してgit pull
を実行し、あなたが作成した関連のイベントリスナを再実行します。
もし、デプロイ手順に自信が持てなければ、--pretend
フラグを使って、何のコマンドとタスクが実行されるのか表示させることができます。
$ rocketeer deploy --pretend
|-- Running: Deploy (Deploys the website) [~14.25s]
|---- Running: Primer (Run local checks to ensure deploy can proceed)
|---- Running: CreateRelease (Creates a new release on the server) [~5.98s]
|------ Running strategy for Deploy: Sync
$ mkdir /home/www/myapp/releases/20140817160632
$ rsync ./ host@server:/home/www/myapp/releases/20140817160632 --verbose --recursive --rsh="ssh" --exclude=".git" --exclude="vendor"
|---- Running: Dependencies (Installs or update the dependencies on server) [~5.15s]
|------ Running strategy for Dependencies: Composer
$ cd /home/www/myapp/releases/20140817160632
$ /usr/local/bin/composer install --no-interaction --no-dev --prefer-dist
|---- Running: Migrate (Migrates and/or seed the database) [~0.21s]
|------ Running strategy for Migrate: Artisan
$ mv /home/www/myapp/current /home/www/myapp/releases/20140817160632
$ rm -rf /home/www/myapp/current
$ ln -s /home/www/myapp/releases/20140817160632 /home/www/myapp/current
Successfully deployed release 20140817160632
|-- Running: Cleanup (Clean up old releases from the server) [~2.68s]
$ rm -rf /home/www/myapp/releases/20140817135635
Removing 1 release from the server
Execution time: 3.5601s
デフォルトでは、Rocketeerは全てを同期実行しますが、--parallel
フラグで、全てを並行デプロイさせるようにもできます。重要な点は、タスクがひとつのキュー内で並行実行されるわけではない点です。(デプロイにおいて)タスクの順序は極めて重要なので、順序は保持されます。並行実行されるのは、いろいろな接続であったり複数ステージのデプロイです。
次のようなタスクが登録されているとします。
Rocketeer::task('some-task', ['foo', 'bar']);
もし、3つの接続と、2サーバと2ステージがそれぞれあったとすると、Rocketeerは計12の並行プロセスを生成します。それぞれは、対応する接続/ステージにおいて、シーケンシャルにfoo
を実行して、そのあとにbar
を実行します。