jgit-chef で s3 に置いたリポジトリからデプロイする


この投稿は Chef Advent Calendar 2014 の 11日目の記事です。

社内に git サーバがあったりしてデプロイするときに困っていたりする全国の皆様こんにちは。

aws を使っているなら jgit を使えば s3 にリポジトリを置いて更新したりできます。

で、chef でリポジトリをチェックアウトする際に使える jgit-chef を作成しました。

https://github.com/team-lab/jgit-chef

基本は chef の git リソース と同じです。

コミットフックか jenkins に

source ~/.aws_env.sh # 環境変数に s3 の書き込み権限を得る
if [ $(git config --get remote.s3.url|wc -l) == 0 ];then
  git remote add s3 amazon-s3://ENV@your-s3-bucket/moromoro.git/
fi

/usr/bin/jgit push s3 "refs/heads/*:refs/heads/*"

のようにjobを設定すると s3 にリポジトリを作成、push してくれるので、 Berkshelf とかで jgit-chef を使えるようにして、

cookbook 'jgit', :git => "https://github.com/team-lab/jgit-chef.git"

metadata.rb のdepends に追加し

depends "jgit"

次のようなレシピを作ると

package "git" # ami-linuxは最初はgitがはいってなくてchefのgitリソースがこける・・
package "java-1.7.0-openjdk" # jgit-chef::install はjavaをインストールしないので自分で入れる
include_recipe "jgit::install" # github から /usr/bin/jgit にインストール

jgit "/opt/moromoro" do
  repository "amazon-s3://IAM@your-s3-bucket/moromoro.git" # こちらの認証はIAM-ROLEでインスタンからs3のリポジトリを参照できるようにしておく
  action :sync
  revision "master"
end

/opt/moromoro に社内リポジトリのmasterをチェックアウトしてくれます。

ご利用ください。