調査という程ではありませんが、自動デプロイで使いそうなツールを調べてみました。
ツール名 | 利用言語 | 概要 |
Vagrant | ruby | 仮想環境の構築 |
Chef | ruby | ソフトウェアのインストールやOSの設定等 |
Puppet | ruby | ソフトウェアのインストールやOSの設定等 |
serverspec | ruby | 構築したサーバに対するテスト |
maven | xml | アプリケーションのビルド |
gradle | groovy | アプリケーションのビルド |
flyway | sql | データベースマイグレーション |
LiquiBase | xml | データベースマイグレーション |
Fabric | python | デプロイ・リモートコマンド実行 |
Capistrano | ruby | デプロイ・リモートコマンド実行 |
(;^ω^)ちょっと多いな・・・
この中でいくつかピックアップして調べてみます。
仮想環境の構築
Vagrant
仮想環境の構築・配布・破棄がrubyスクリプトで行うことができます。
主にVMWare・VirtualBoxの仮想環境を構築する事ができるようです。
環境構築の中で、chefを使って各種ソフトウェアをインストールする事もできます。
AmazonWebService・EC2の環境構築もできるそうです。
ソフトウェアのインストールやOSの設定等
Chef
apacheやtomcat等、アプリケーションのインストール等を、rubyスクリプトで行うことができます。
Vagrantとできる部分が少し重複していて、EC2のインスタンスの作成もできるそうです。
これらツールの中で最もヘビーなのではないでしょうか。
私には手が届かなそうなツールです・・
インフラエンジニア達が何人も集まって、環境構築〜環境設定のフローを頑張って考えて、
Chefの環境を頑張って作って、最適な環境を考えて、最適な設定を作る。
大分ハードルが高いように思えます。
多分ですが、そのうちamazonがEC2の標準サービスにしてくれると思ってます。
web管理画面でapacheを選択、バージョンを選択、等で環境設定ができてしまうのでは?
amazonならそのうち絶対にやるでしょう。
構築したサーバに対するテスト
serverspec
ちょっと情報が少ないですが、
環境設定したサーバが想定通りかどうかをテストするツールとのことです。
JUnitがソースコードを自動テストするのに対し、
serverspecはサーバの環境・設定を自動テストします。
アプリケーションのビルド
gradle
treeのメモ帳で沢山記事を書いたgradleです。
主にjavaのビルドを行う事ができます。
ant・mavenがxmlでビルドを定義するのに対し、gradleはgroovyスクリプトで定義します。
groovyなので、完全なスクリプトで記述できるので、可読性・拡張性は非常に高いです。
なんでもできてしまいます。
キャッシュ機構とマルチスレッド実行によって、
mavenと比較して「軽い」「速い」「拡張性高い」「可読性高い」です。
データベースマイグレーション
flyway
java製の非常にライトなデータベースマイグレーションツールです。
バージョン毎にsqlファイルを用意しておき、SQLを記述しておくだけです。
ロールバック・ダウングレード・リビジョン指定、等の高度な事はできません。
機能が限定されている代わりに、覚えやすいかと思います。
LiquiBase
同じくデータベースマイグレーションツールです。
DBの変更をチェンジログ(変更部分のみ)方式で実行していきます。
チェンジログはxmlで記述するので、書き方を覚える必要があります。
マイグレーション以外にも、DBのdiffを取ることもできるようなので、
diff目的で使うのもいいかと思います。
デプロイ・リモートコマンド実行
Fabric
個人的に最も注目しているツールです。
システム管理・デプロイツールと言われていますが、要はpythonからbashでコマンドを実行するツールです。
bashでスクリプトを書くと、例えば以下の事が問題になります。
- try-catchがしにくい(trapはあるけど)。finallyが無い。
- 変数のスコープの種類が少なく、誤って変数を上書きする危険がある。
- クラスの概念が無いので、抽象化・共通化ができない。
- シンタックスエラーがあっても気づきにくい。
- 関数は関数の実行より前に記述しないといけない。
等のデメリットがあると思っています。この中でtry-catchとシンタックスエラーについては結構困ります。
この辺の弱点を、pythonで補完してくれるのが、Fabricなのです。
chefと違って覚える事も少なく、単純なbashスクリプトがメインなので、
他人が修正しやすい、バージョンアップ等の互換性も心配も少なそうです。
複数のサーバに対して並列でsshでリモートコマンドが実行できるそうなので、
普通のバッチ等にも使えちゃいそうです。
入門Chef Solo - Infrastructure as Code
- 作者: 伊藤直也
- 出版社/メーカー: 伊藤直也
- 発売日: 2013/03/11
- メディア: Kindle版
- 購入: 16人 クリック: 1,027回
- この商品を含むブログ (19件) を見る
Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集
- 作者: Srirangan,長尾高弘
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2012/03/02
- メディア: 大型本
- 購入: 7人 クリック: 89回
- この商品を含むブログ (12件) を見る
Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 496回
- この商品を含むブログ (64件) を見る