はじめに
GitLabを使っているけど、いろんなしがらみでsvnにも履歴を送らないといけないのでやったこと。
環境
使うのはsubgit。
イメージはこんな感じ。
GitLab --(pull)--> work.git --(push)--> subgit ===> svn
subgitのリポジトリにpushすればsvnに同期する。
ただしsubgitはbareリポジトリなので、subgit側からpullできない。
なので、GitLabからpullしてsubgitにpushするためのworkリポジトリを作る。
もっといいやり方がありそうな気がするけど。
subgit
subgitリポジトリを作る。
# subgit configure --svn-url https://your.svn.server/repos svn-sync-repos
# (config設定)
# subgit install svn-repos.git
# git clone svn-sync-repos work.git
work.gitにGitLabを紐づけて、イニシャルセット。
# git remote add gitlab git@your.gitlab.server:yourname/repos.git
# git pull gitlab master
# git push -u origin master
これでsvnにデータが流れるはず。
jenkinsで自動化
手作業なんてやってられないので、当然自動化する。
まずはjenkinsでGitLabからデータを取得する準備。
つっても、普通に使う場合と同じで、jenkinsの実行ユーザーのsshキーを登録する。
# sudo su - jenkins
# ssh-keygen
# (簡単のため、パスワードは空にする)
これでOK。
jenkinsジョブ
定期実行ジョブにする。リアルタイムである必要は全くないので。
イニシャルで登録した時のpush/pullをシェルまたはバッチに記述するだけ。
# git pull gitlab master
# git push -u origin master
これでうまく行ってるはず。
リアルタイムに同期したければ、ビルドトリガをそのように。