Rocketeerはデプロイする人が想像するだろう基本タスクは、あらかじめ全て備えています——新しいリリースの作成、そのテスト、データベースのマイグレーション、など。ほとんどのタスクは一通りのやり方しかありませんが、いくつかの基本タスクには、目的を達成するのにいくつかの方法が存在しています。それがストラタジーです。
ストラタジーを利用する一番重要なタスクは、デプロイと更新です。デフォルトでは、あなたのSCM(Git, Svnなど)を使ってクリーンな新しいリリースをサーバからクローンしますが、それがストラタジーとして利用可能な全てではではありません。rocketeer strategies
コマンドで、どのタスクがストラタジーを利用しているか、どのオプションが利用可能かを確認することができます。コマンドは、次のような表を出力します。
ストラタジー | 実装 | 説明 |
---|---|---|
check | Php | サーバがPHPアプリケーションを受け取り可能か確認 |
check | Ruby | サーバがRubyアプリケーションを受け取り可能か確認Checks |
deploy | Clone | SCMでリポジトリの新しいインスタンスをクローン |
deploy | Copy | リポジトリのクローン済みインスタンスを複製して、アップデート |
deploy | Sync | ローカルファイルからrsyncを使って作成または更新 |
test | Phpunit | PHPUnitでテストを実行 |
migrate | Artisan | データベースをLaravelのArtisan CLIでマイグレート |
dependencies | Composer | Composerで依存パッケージをインストール |
dependencies | Bundler | Bundlerで依存パッケージをインストール |
dependencies | Npm | NPMで依存パッケージをインストール |
dependencies | Bower | Bowerで依存パッケージをインストール |
dependencies | Polyglot | 上記のパッケージマネージャを必要に応じて実行 |
どのタスクがどのストラタジーを使用するかは、設定フォルダ内のstrategies.php
ファイルで設定することが可能です。
Rocketeerには、それぞれのストラタジーに利用可能ないくつかの実装がありますが、組み込まれていない特定のツールや手順を使いたいこともあります。独自のストラタジーを追加することは非常に簡単で、そこには本当に2つのステップしかありません。例として、Nodeアプリケーションを使うケースで、PHPunitのかわりにGruntを使いたいとしましょう。
最初に、Rocketeer\Abstracts\AbstractStrategy
を拡張してクラスを作成します。もし、RocketeerがComposerの依存モジュールとしてプロジェクトにロードされているなら、クラスは自動ロードされる限りどきにども置けます。そうでなければ、.rocketeer/strategies
以下に作成する必要があります:
<?php
namespace Acme;
use Rocketeer\Abstracts\Strategies\AbstractStrategy;
class GruntStrategy extends AbstractStrategy
{
// ...
}
次に、どのストラタジー該当するのか定義する必要があります。そのために、関係するインターフェースをRocketeer\Interfaces\Strategies
名前空間から実装するでしょう。私たちの場合であれば、TestStrategyInterface
は次のようになります:
<?php
namespace Acme;
use Rocketeer\Abstracts\Strategies\AbstractStrategy;
use Rocketeer\Interfaces\Strategies\TestStrategyInterface;
class GruntStrategy extends AbstractStrategy implements TestStrategyInterface
{
public function test()
{
// ...
}
}
あと残るのは、ビジネスロジックを書くことだけです。ストラタジーはタスクというより、同じ特徴(トレイト)を実装するので、通常のすべてのツール、特にバイナリを使うことができます。(より詳しい情報は、関連するドキュメントのセクションを見てください)
<?php
namespace Acme;
use Rocketeer\Abstracts\Strategies\AbstractStrategy;
use Rocketeer\Strategies\Interfaces\TestStrategyInterface;
class GruntStrategy extends AbstractStrategy implements TestStrategyInterface
{
public function test()
{
return $this->binary('grunt')->runForCurrentRelease('test');
}
}
これは、設定された接続において、grunt test
を実行します。残る作業は、Rocketeerをそのストラタジーを使うように設定することです。strategies.php
ファイルを次のように書きます:
// Which strategy to use to test your application
'test' => 'Acme\Grunt',
もう一度、作ったクラスがどこかにロードされているか確認しましょう。もし、.rocketeer/strategies
にあるならRocketeerは自分自身でロードするでしょう。もし、Rocketeerがあなたのアプリケーションの依存モジュールになっているなら、クラスがComposerによってロードされているか確認しましょう。