Capistranoで簡単デプロイ -開発用サーバー編-

公開日: : CI, IT, Jenkins, 開発環境


cakePHPを使って開発しているサービス(Nb4u)で、リリース周りを楽にしたいなと思いCapistranoを使ってみました。

 やりたいこと

今までの流れは以下のとおりでした。

  • [1]ローカルマシンで開発&テスト
  • [2]ソースをコミット
  • [3]開発用のサーバーにログインしソースを最新にする

上記だと面倒&ダサい。
というわけで、上記の[3]の箇所を以下のように変更。

  • [3]Jenkinsでソースをチェックし開発用のサーバーのソースを最新にする

今回は開発用のサーバーなので、常に最新のソースになるようにしています。
本番用は開発用とは違って、コマンドを叩いて最新のソースにするようにしてます。

 環境説明

今回、利用したのは以下の2つ

  • Capistrano
  • Jenkins

Jenkinsのインストールは以下を参考にしてください。

 やったこと

 Capistrano側

以下のようにファイルを用意

#基本定義
set :user,         "sshでログインするユーザー"
set :password,     "パスワード"
set :svn_repo,     "svnのリポジトリパス"
set :svn_pass,     "svnのパスワード"
set :checkout_dir, "チェックアウトしたソースを置く場所(例:/home/checkout)"
set :deploy_dir,   "ソースを設置する場所(例:/home/sample)"
set :deploy_user,   "ソースを設置している場所の権限(apacheが良い)"
set :deploy_group,  "ソースを設置している場所の権限(apacheが良い)"
# サーバ定義
role :dev, "localhost"
default_run_options[:pty] = true
# checkoutタスク
task :checkout_, :roles => [:dev] do
    sudo "rm -rf #{checkout_dir}"
    sudo "mkdir #{checkout_dir}"
    sudo "svn co --username #{user} --password #{svn_pass} #{svn_repo} #{checkout_dir}"
    sudo "chown -R #{user} #{checkout_dir}"
    sudo "find #{checkout_dir} -name ".svn" -type d | xargs rm -rf"
end
//svnからチェックアウトする1行を書き忘れてました[2012/06/13]。
# uploadタスク
task :upload_, :roles => [:dev] do
    sudo "rm -rf #{deploy_dir}"
    sudo "cp -rp #{checkout_dir} #{deploy_dir}"
    sudo "chown -R #{deploy_user}:#{deploy_group} #{deploy_dir}"
end
# phpcsタスク
task :phpcs_, :roles => [:dev] do
 sudo "phpcs --report=summary --report-checkstyle=checkstyleの結果ファイルを置く場所 --standard=Zend --extensions=php コーディング規約対象の場所(例:/home/sample/app/controllers) | id"
end
task :deploy_, :roles => [:dev] do
 checkout_
 upload_
 phpcs_
end

簡単に説明すると以下のようなことをやってます(参考サイト[1]をかなり参考にしてます)。

  • checkout_タスク

    • SVNからソースをチェックアウト
    • チェックアウトした際に出来る.svn関連を全て削除
  • upload_タスク

    • 最新ソースを指定した場所にコピー
  • phpcs_タスク

    • PHP用コーディング規約ツールでチェック

      • ただしエラー、警告があっても止まらないようにするために|idをつけている

 Jenkins側

設定で以下の箇所を記述

  • ビルド・トリガ

    • SCMをボーリング(毎時5分にチェック)
  • ビルド(シェルの実行)

    • Capistranoを呼び出すように記述
    • (例)cap -f sample.rb deploy_
  • ビルド後の処理

    • Checkstyle警告の集計(出力ファイルを指定)

これで、ソースをコミットしたらJenkinsがCapistranoを呼び出して開発用サーバーを最新の状態にしてくれています。
ちなみに、今回は仮にCheckstyleで警告が出ていようがスルーさせています。

 参考サイト

広告

関連記事

MacでRuby on Railsの開発環境構築 -Apacheで動かす-

* 環境 -MacBook Air MD231J/A -Mac OS X バージョン10.8.2

記事を読む

ndk

Androidアプリ開発 -画像処理をC言語で高速化-

* 画像を扱う際の問題(1):計算処理の遅さ 前回、セピア画像にする方法を書きました。

記事を読む

no image

CakePHP1.3でテストコード(2) -フィクスチャをいじってみる(テストデータの動的登録)-

cakePHP1.3でのSimpleTestを使ったテストケースの第2回目。 今回は、動的にテストデ

記事を読む

no image

Facebookがちょっとコワイ vol.2 -本当にあなたはあなたなの?-

以下のブログを読んで、さらにコワイと思ったFacebook。 あなたが登録している「友

記事を読む

no image

iPhoneアプリを開発してての疑問 -教えてエライ人!-

MacでiPhoneアプリを開発してて疑問に思ったのの解決してないことを列挙。 知識不足をさらけ出し

記事を読む

1

Androidアプリ開発 -9patchで吹き出し画像を作る-

* やりたいこと TextViewで文字を表示させ、背景画像に吹き出し画像を設定した場合。 文字

記事を読む

githubを使っての開発(1) -実践github-flow-

今は開発でgithubを利用しています。 開発をおこなう上で、githubをどのように扱えば良いの

記事を読む

no image

jQuery Mobileでミスしたこと -JSだけ最新にしてしまってレイアウト崩れたの巻-

* 前提(CDN先) jQuery Mobileを使う場合、cssを自前のサーバにおいて、jsはC

記事を読む

list-normal

jQuery Mobileのリストの見た目をちょっとカスタマイズ -覚書-

jQuery Mobileを使えば簡単にスマートフォン対応できる言えば出来るのですが、少しでもカスタ

記事を読む

no image

TestLink1.91のバグの修正方法

どうやらTestLink1.91にはバグがあるようなので、修正方法を以下に記述。 Test

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑