読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

自動デプロイで使いそうなツールの調査(vagrant/chef/fabric…etc)

ビルド デプロイ

調査という程ではありませんが、自動デプロイで使いそうなツールを調べてみました。

ツール名 利用言語 概要
Vagrant ruby 仮想環境の構築
Chef ruby ソフトウェアのインストールやOSの設定等
Puppet ruby ソフトウェアのインストールやOSの設定等
serverspec ruby 構築したサーバに対するテスト
maven xml アプリケーションのビルド
gradle groovy アプリケーションのビルド
flyway sql データベースマイグレーション
LiquiBase xml データベースマイグレーション
Fabric python デプロイ・リモートコマンド実行
Capistrano ruby デプロイ・リモートコマンド実行

(;^ω^)ちょっと多いな・・・

この中でいくつかピックアップして調べてみます。

仮想環境の構築
Vagrant

仮想環境の構築・配布・破棄がrubyスクリプトで行うことができます。
主にVMWareVirtualBoxの仮想環境を構築する事ができるようです。
環境構築の中で、chefを使って各種ソフトウェアをインストールする事もできます。
AmazonWebService・EC2の環境構築もできるそうです。

ソフトウェアのインストールやOSの設定等
Chef

apachetomcat等、アプリケーションのインストール等を、rubyスクリプトで行うことができます。
Vagrantとできる部分が少し重複していて、EC2のインスタンスの作成もできるそうです。
これらツールの中で最もヘビーなのではないでしょうか
私には手が届かなそうなツールです・・
インフラエンジニア達が何人も集まって、環境構築〜環境設定のフローを頑張って考えて、
Chefの環境を頑張って作って、最適な環境を考えて、最適な設定を作る。
大分ハードルが高いように思えます。

多分ですが、そのうちamazonがEC2の標準サービスにしてくれると思ってます。
web管理画面でapacheを選択、バージョンを選択、等で環境設定ができてしまうのでは?
amazonならそのうち絶対にやるでしょう。

構築したサーバに対するテスト
serverspec

ちょっと情報が少ないですが、
環境設定したサーバが想定通りかどうかをテストするツールとのことです。
JUnitソースコードを自動テストするのに対し、
serverspecはサーバの環境・設定を自動テストします。

アプリケーションのビルド
gradle

treeのメモ帳で沢山記事を書いたgradleです。
主にjavaのビルドを行う事ができます。
ant・mavenxmlでビルドを定義するのに対し、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

入門Chef Solo - Infrastructure as Code

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)