個人的な備忘録のたぐいです。
試験用やバックアップ的にlan内など複数のremote(VPN経由なgitlab)に同期していたわけですが、手動がダルかったので自動にしましたというだけです。
いまさら感MAXですみません。
(定期で自動で同期しとくとoriginにアクセスできないことがあったときにLAN内のgitlabのブラウザから確認できていいんじゃないかと思いますです)
ラベルつきでリモートを追加
# git remote add lan git@gitlab.hoge.net:infra/test.git
# git remote add foreign git@gitlab-hoge-test.net:infra/test2.git
# git remote -v
lan git@gitlab.hoge.net:infra/test.git (fetch)
lan git@gitlab.hoge.net:infra/test.git (push)
origin git@gitlab.mng.hoge.net:infra/test.git (fetch)
origin git@gitlab.mng.hoge.net:infra/test.git (push)
foreign git@gitlab-hoge-test.net:infra/test2.git (fetch)
foreign git@gitlab-hoge-test.net:infra/test2.git (push)
設定かくにん
# cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@gitlab.mng.hoge.net:infra/test.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "lan"]
url = git@gitlab.hoge.net:infra/test.git
fetch = +refs/heads/*:refs/remotes/lan/*
[remote "foreign"]
url = git@gitlab-hoge-test.net:infra/test2.git
fetch = +refs/heads/*:refs/remotes/foreign/*
とりあえずpushしてみる
# git push lan
# git push foreign
手動でやることをそのまま書いたようなスクリプトをつくってみた。
(addしてないやつを自動でするのはキケンな気がするのでしない)
# cat /root/git-sync-test.sh
# !/bin/bash
export PATH=$PATH:/usr/local/bin
GITCMD=/usr/local/bin/git
exec 1> >(logger -p local0.info) 2>&1
cd /var/git-repos/test
${GITCMD} checkout master
${GITCMD} pull origin master
${GITCMD} push lan master
${GITCMD} push foreign master
exit
ログ出すだけだと気づかないのでほんとうは失敗したらチャットかなんかに飛んでくるかんじのがいいんでしょうけども。それは今後の課題ということで。
たぶん同期が失敗するのってディスクがあふれたとか壊れたとかネットワーク的な疎通の問題とかくらいですかね。
一回動かしたあとにログをかくにん(きりまわすのまで書くのだるかったので適当にsyslogにだした)
# tail /var/log/messages
Feb 9 14:24:42 git01 komi: Already on 'master'
Feb 9 14:24:42 git01 komi: M#011.chef/knife.rb
Feb 9 14:24:45 git01 komi: From gitlab.mng.hoge.net:infra/test
Feb 9 14:24:45 git01 komi: * branch master -> FETCH_HEAD
Feb 9 14:24:45 git01 komi: Already up-to-date.
Feb 9 14:24:46 git01 komi: Everything up-to-date
Feb 9 14:24:53 git01 komi: Everything up-to-date
cron登録。jenkinsつかってもいいけどとりあえずここは誰も見える化といいださない気がするのでcronで。
# crontab -l|tail -1
30 22 * * 1-5 /root/git-sync-test.sh
rootのcronに登録したらgitコマンドのPATHが通ってなかったのでちょっと修正しました。
あとちょっとスクリプトのおき場所がフリーダムすぎますかね。
参考:
http://bayashi.net/diary/2012/0714
http://qiita.com/h141dev/items/5af16b869248cf0d994e
http://qiita.com/mykysyk@github/items/e5398bc8262d35f4a1b9