2014年12月22日月曜日

Gitのリモートリポジトリ間で単方向の同期をとる

こんばんは。最近はブログ書きまくってますね。いい調子。

さて、最近はクラウド型のCIツール(Werckerとか、Shippableとか)が何かと流行ってますが、使おうと思ったときにBitbucketやGithubを強制されるんですよね。プライベートな開発で、Bitbucketのコラボレーション制限とかが邪魔をして、ちょっと人数のいる開発とかをやろうとすると、CIツールが使えないという大変残念な結果に。

しょうがないので、他のGitホスティング(あまり評判よくないけどCodebreakとか)と、Bitbucketを同期をとって、CIツールでデプロイするときはBitbucketを参照し、自分たちがプッシュする先はCodebreakにするってことをやってみました。

まあ、とりあえず方法としては、CodebreakにもあるWebhookを利用して、プッシュされたら外部サーバーにHookして、Bitbucketと連携させるスクリプトを書いてみることにしました。

Web言語は何にしようかなーと思ったりとかはしたんですが、サーバーであっさり動くし慣れ親しんでるのでPHPで動かすことにして、シェルスクリプトをたたくだけにしてみました。

肝心のGitとの同期ですが、--mirrorオプションを使ってサクッとクローンして、--mirrorなbareとして動作させています。その方が楽だしね。

あと、スクリプトを置く場所で、SSH秘密鍵を共有したくなかったので、GIT_SSH環境変数を使って、sshコマンドをラップして、任意の秘密鍵を用いるようにしました。秘密鍵の生成はssh-keygenで場所を指定して生成すれば全然問題になりません。

毎度毎度コマンドがりがりのくせに、今回ばかりは成果物ができたので、成果物をGithubに放り込んでみました。もしよければ使ってやってください。あまり検証してないので、セキュリティ的にヤバイかも?
https://github.com/litols0816/git-sync

0 件のコメント:

コメントを投稿