Create: 2013/07/03
LastUpdate: 2013/07/04
2.テスト環境設定
ここでは、「 1.サーバ構築」で作成したサーバをテストするために、テスト用のWEBアプリケーション(PHP)を用意して、Subversionのレポジトリに登録し、リリース時の作業をCapistarno のタスクとして定義します。
2.1.WEBアプリケーションの作成
今回は、テスト用にPHPアプリを1ファイルだけ用意します。内容は以下のとおり。ファイル名は "phpinfo.php" とします。
<?php /** * PHPINFO * * PHP versions 5 * * @category CategoryName * @package PacageName * @author Author <username@example.com> * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @link http://example.com/ */ phpinfo(); ?>phpcs で構文チェックをしてエラーがないことを確認します。
# phpcs phpinfo.php Time: 0 seconds, Memory: 4.00Mb
2.2.subversionのレポジトリ作成
Subversion のレポジトリを作成し、以下のようなディレクトリ構成で管理することにします。
- trunk ・・・ 開発中のコードを管理する。(メイン)
- tags ・・・ リリースするコードを管理する。変更しない。
- branches ・・・ リリースしたコードの保守
以下のようコマンドを実行して、"project1" 用にレポジトリを作成します。
# svnadmin create /home/svn/project1上記2.1で作成した WEBアプリケーションを trunc にインポートします。
# cd /var/www/html/project1 # svn import file:///home/svn/project1/trunc -m 'Initial import'branches ディレクトリを作成します。
# svn mkdir file:///home/svn/project1/branches -m 'setup'tags ディレクトリを作成します。
# svn mkdir file:///home/svn/project1/tags -m 'setup'レポジトリをHTTPで公開するので、Apacheから読み書きできるように所有者を変更します。
# chown -R apache.apache /home/svn/project1ブラウザで以下のURLにアクセスして、レポジトリの内容を確認します。
- http://<IPアドレス>/repos/project1/
trunc をクリックすると下図のとおり。WEBアプリケーションが登録されていればOKです。
2.3.Capistrano のタスク作成
リリース時に行う作業をCapistrano のタスクとして定義します。作成するタスクは以下のとおり
- チェックアウト
- 受け入れチェック
- リリース
- デプロイ(チェックアウト、受け入れチェック、リリースを実行)
- リリースチェック
- 切り戻し
内容は、以下のとおり。role の web で定義したWEBサーバ2台に対してリリースを行います。
# # リリース # project1 # # 基本定義 set :app_name, "project1" # アプリ名 set :user, "root" # sshユーザー set :password, "password" # sshパスワード set :svn_repo, "file:///home/svn/project1/tags" # svnのリポジトリパス set :svn_tag, "rel-0.0.0" # チェックアウト対象 set :checkout_dir, "/home/unyo/workspace/project1" # チェックアウトしたソースを置く場所 set :deploy_dir, "/var/www/project1" # ファイルを設置する場所 set :deploy_bk_dir, "/var/www/bk" # バックアップを置く場所 set :deploy_user, "apache" # ファイルの所有者(user) set :deploy_group, "apache" # ファイルの所有者(group) # サーバ定義 # すべてのサーバは、同じSSHユーザ、パスワードで接続します。 role :local, "localhost" # ローカルホスト role :web, "192.168.1.61","192.168.1.66" # リリース先のWEBサーバ #-------------------------- # タスク:チェックアウト #-------------------------- desc "チェックアウト" task :u_checkout, :roles => [:local] do # レポジトリからエクスポート run "rm -rf #{checkout_dir}" run "svn export #{svn_repo}/#{svn_tag} #{checkout_dir}" # リリース番号の保存 run "echo '#{svn_tag}' > #{checkout_dir}/Release" end #-------------------------- # タスク: 受け入れチェック #-------------------------- desc "受け入れチェック(phpcs)" task :u_phpcs, :roles => [:local] do # 構文チェック run "phpcs --standard=PHPCS #{checkout_dir}/*.php" end #-------------------------- # タスク: リリース #-------------------------- desc "リリース" task :u_upload, :roles => [:web] do # バックアップ run "mkdir -p #{deploy_bk_dir}" run "rm -f #{deploy_bk_dir}/#{app_name}.tgz" run "if [ -d #{deploy_dir} ] ; then tar cvfzP #{deploy_bk_dir}/#{app_name}.tgz #{deploy_dir} ; fi" # ディレクトリ送信 run "rm -rf #{deploy_dir}" upload("#{checkout_dir}", "#{deploy_dir}", :via => :scp, :recursive => true) # 所有者変更 run "chown -R #{deploy_user}:#{deploy_group} #{deploy_dir}" end #-------------------------- # タスク: デプロイ #-------------------------- desc "デプロイ" task :u_deploy, :roles => [:local] do u_checkout u_phpcs u_upload end #-------------------------- # タスク: リリース・チェック #-------------------------- desc "リリース・チェック" task :u_relcheck, :roles => [:web] do run "cat #{deploy_dir}/Release" end #-------------------------- # タスク: 切り戻し #-------------------------- desc "切り戻し" task :u_restore, :roles => [:web] do run "test -e #{deploy_bk_dir}/#{app_name}.tgz" run "rm -rf #{deploy_dir}" run "tar xvfzP #{deploy_bk_dir}/#{app_name}.tgz" endこのファイルで定義したタスクは、運用管理サーバに root ユーザでログインして実行します。
以下のように実行すると、タスク一覧を見ることができます。
# cap -T -f /root/workspace/project1.cap cap invoke # Invoke a single command on the remote servers. cap shell # Begin an interactive Capistrano session. cap u_checkout # チェックアウト cap u_deploy # デプロイ cap u_phpcs # 受け入れチェック(phpcs) cap u_relcheck # リリース・チェック cap u_restore # 切り戻し cap u_upload # リリース Extended help may be available for these tasks. Type `cap -e taskname' to view it.各タスクは、以下のように実行します。
エラーがある場合は、終了コード(ex. Bashの場合は $? )に 0 以外の値が設定されます。
(1) チェックアウトの場合
svn_tag にチェックアウトするタグ名を指定します。
# cap -s svn_tag=rel-1.0.0 -f /root/workspace/project1.cap u_checkout
(2) 受け入れチェックの場合
拡張子が、”.php" のファイルについては、PHPの構文チェックを行います。
# cap -f /root/workspace/project1.cap u_phpcs
(3) リリースの場合
WEBサーバ上のWEBアプリケーションをバックアップしてからリリースします。
# cap -f /root/workspace/project1.cap u_upload
(4) デプロイの場合
上記(1)、(2)、(3)を実行します。
# cap -s svn_tag=rel-1.0.0 -f /root/workspace/project1.cap u_deploy
(5) リリースチェックの場合
WEBサーバ上のWEBアプリケーションのリリース番号を表示します。
# cap -f /root/workspace/project1.cap u_relcheck
(6) 切り戻しの場合
バックアップを戻します。
# cap -f /root/workspace/project1.cap u_restore