タイトル通り。
初めての試みなので楽しみ+(0゚・∀・) + ワクテカ +
やりたいこと
最初はbitbucketにフックさせて、デプロイということをやりたかった。
しかし、1. bitbucketの認証鍵を商用サーバで発行しなければならない。2.商用サーバにbitbucketからPOSTするスクリプトを用意しなければならない。3.結局商用サーバで、git pullしなければならない。
などと、なんか途中で面倒になったので、こうしました。
こんな感じ。
実践
ローカルの作業
ローカルリポジトリの .git/config を修正して、とあるpushを実行すると、2つのリポジトリが更新されるように修正します。
- .git/config
# この記述を追加 [remote "all"] url = ${ bitbucket のリポジトリパス } url = ${ 商用サーバのgitのリポジトリパス }
サーバでの作業
んで、舞台は変わって商用サーバへ
リポートリポジトリを作成します。
任意のディレクトリで実行します。
$ git init --share --bare
フック用のスクリプトを配置しましょう。
どうやら、git/hooks/ の中に配置すればおkらしいです。
今回は、post-receive にフックさせたいので、そのままの名前を使います。※実行権限も忘れずに
$ touch git/hooks/post-receive $ chmod +x git/hooks/post-receive
テストでスクリプトファイルを作成する。
$ vim git/hooks/post-receive # こんな感じのスクリプトファイルを作成 # ================== #!/bin/bash echo "TEST" >/tmp/test.log # ==================
これで、フックできるようになると思います。
試してみる。pushを実行
$ git push all master Everything up-to-date
おろ? 動作していない・・・?
どうやら、pushしたとしてもリポジトリが更新されないと動作しないもよう
というわけで、何かしたらファイルを追加してコミットしてみて、pushしてみた。
すると、、、
$ cat /tmp/test.log TEST
おお! すげ。動いたっぽいですね。
次に、簡単なデプロイスクリプトを用意します。
ちなみに、cakephp用です。
また、先程のフック用スクリプトも修正します。
- post-receive
#!/bin/bash # git client ディレクトリを移動する cd ~/git/pull/ # ここでリモート(ローカルに配置している)リポジトリからpullする git pull origin master # んで、デプロイ用のスクリプトを実行 bash ~/deploy.sh
- deploy.sh
#!/bin/bash # valiable # ソースが入っているディレクトリからコピーする。 ROOT_DIR="~/git_pull/git" DOC_ROOT_DIR="/var/www/htdocs" # file copy \cp -rf ${ROOT_DIR}/app/ ${DOC_ROOT_DIR} \cp -rf ${ROOT_DIR}/lib/ ${DOC_ROOT_DIR} \cp -rf ${ROOT_DIR}/public_html/ ${DOC_ROOT_DIR} # make directory # copyの中に入っているから、これはいらないっぽい # mkdir -p ${DOC_ROOT_DIR}/app/tmp/cache # mkdir ${DOC_ROOT_DIR}/app/tmp/logs # permission chmod 777 -R ${DOC_ROOT_DIR}/app/tmp
これでおk。post-receiveと同様にdeploy.shにも実行権限を渡すことを忘れないのでね。
今回は自分で書いちゃったけど、こっちを参考にしたほうがいいかも。