githubへpushした時にawsからソースを取得する
AWSじゃなくても良いんですけどね。
githubにはservicehookというgitリポジトリのhooksみたいな機能がある。
リポジトリの画面からSettings(レンチのアイコン)→ServiceHooks→WebHook URLs の順序で辿って URLという欄に通知させたいサーバーのurlを記載する。
githubにpushすると、このurlにjson形式でpushされた情報(timestampとかheadのsha1値とか色々)が飛んで来る。
このjsonをパースするなり、リクエストが有ったから適当にpullするとか書けば良い。 そういう意味では
- 一台のアプリケーションサーバーならgit pull
- 二台以上ならcapistranoを起動する
とかの選択肢になると思う。
あ、それとリクエストはhttpなのでwebサーバーが必要です。
sinatraで書くとこんな感じ。 リクエストはpayloadというパラメータに入って来るらしい。
#!/usr/bin/ruby require 'rubygems' require 'sinatra' require 'json' require 'sinatra/reloader' require 'logger' # 何かログ書きたかったら Log = Logger.new('std.log') post '/' do # 何か特定の動作させたいなら下記の値からsha1取るとかして動作させる # 今回はpullするだけ push = JSON.parse(params[:payload]) # ログ Log.info(p(result)) `cd /gitdir && git pull origin` end
結構便利。