オープンソースこねこね

Webプログラミングなどについてあれこれ。

デプロイツールAltaxをバージョン2に更新しました

Capistrano的なPHP製デプロイツールAltaxをバージョン1→2としてアップデートしました。

https://github.com/kohkimakimoto/altax

このソフトウェアはPHPで記述したタスクを、複数のリモートサーバに対して実行します。 サーバ接続には鍵認証のSSHを使用し、並列に実行します。 動作に必要なファイルは1つだけで、PHPの実行環境があれば簡単に導入できます。

Version1からの変更点

  • 実装をSymfony Componentsを使って大幅に変更、再構成。
  • pharによる実行ファイル形式の配布をサポート。
  • デフォルトの読み込み設定ファイルのパスを変更。
  • クラスベースのタスク定義をサポート。
  • ログ出力機能を追加。
  • SSH接続の実装部分をsshコマンドからphpseclibに変更。

インストール

ドキュメントはまだ更新してないので、ざっくり最初の使い方だけ記述しておきます。実行にはPHP5.3以上が必要です。またWindowsでは多分動きません。

インストールは以下のコマンドを実行するだけです。

$ curl https://raw.github.com/kohkimakimoto/altax/master/installer.sh | sudo bash -s system v2

/usr/local/bin/altaxに実行ファイルがインストールされます。 手動で好きな場所にインストールしたい場合は、以下のように直接altax.pharを持ってきて配置すればいいでしょう。

$ wget https://github.com/kohkimakimoto/altax/raw/master/altax.phar
$ chmod 755 altax.phar
$ mv altax.phar /path/to/install_dir/altax

とりあえず実行する

なにも付けずにコマンドを叩くと、バージョン情報やサブコマンド一覧が表示されます

$ altax 

設定ファイルを作成する

$ altax init

initコマンドを実行するとカレントディレクトリに以下のような構造の.altaxディレクトリを作成します。

.altax/
    config.php              # メインの設定ファイル。
    hosts.php               # 接続先ホストを記述する用のファイル
    tasks/                  # タスク定義を置くディレクトリ
        hellow.php.sample   # サンプルのタスク定義。

必須なのはconfig.phpだけで、その他のファイルは必要に応じてconfig.phpから読み込んで使用します(今回は使いません)。 config.phpはコメントアウトされているところを除くと以下のようになっています。

host('127.0.0.1', array('web', 'localhost'));

desc('This is a sample task.');
task('sample',array('roles' => 'web'), function($host, $args){

  run('echo Hellow World!');

});

host関数で接続先ホストの設定、taskで実行タスクを定義しています。このサンプルではローカルホストに接続しにいきます。 接続先ホストはパスワードなしの鍵認証でSSHできるようにしておく必要があります。

再びaltaxコマンドをサブコマンドなしで実行します。

$ altax 

Available commands:
  config   Show configurations
  help     Displays help for a command
  init     Create default configuration directory in the current directory
  list     Lists commands
  sample   This is a sample task.

Available commandsにsampleタスクが表示されます。実行してみましょう。

$ altax sample
Altax version 2.1.0
Starting altax process
  - Starting task sample
    Found 1 target hosts: 127.0.0.1
    - Running sample at 127.0.0.1
Hellow World!
    Completed task sample

以上のようにHellow World!がechoコマンドで実行されます。

詳細な使い方について

今回はここまでです。詳細は後日、ドキュメントかブログにまとめようと思っています。

メモ) Symfony Componentsが激しく便利な件

今回コマンドラインのプログラムを書き直したわけですが、その際に利用したSymfony Componentsが激しく便利でした。

あたりを使ったわけですが、 今までコマンドラインオプションをパースする処理をgetopt関数使ってシコシコ書いていたりしたのが、すんごく簡単に書けるようになります。 出力メッセージに色つけたり、ディレクトリからファイル一覧を持ってきたりとかもすんごく楽。

みんなも使ったほうがいいですヽ(^o^)丿。

メモ) だれか知ってたら教えて

SSHでコマンド実行が正常にできることのテストをtravis-ciでやるのってどうすんだと。 わからん。とりあえず、このあとCapistranoのテストコード見に行ってきますよ、と。