RedmineとGitlabを連携してみた件
よくある記事ですが、自分の作業履歴的な感じで書き残します。
環境
Redmineサーバ - redmine3.0.4を使用。 (この記事で作った環境です) l-light-note.hatenablog.com
Gitサーバ - GitLab Omnibusでrpmインストール。バージョンは7.14.3。
手順
redmine_github_hook.git のインストール
redmine_github_hook.gitというプラグインを使うことで、gitにpushしたタイミングでRedmine側でfetchして
Redmineに反映してくれるみたいです。
git cloneで持ってきてredmineを再起動するだけです。
@redmineサーバ $ cd /var/lib/redmine/plugins $ git clone https://github.com/koppen/redmine_github_hook.git $ touch /var/lib/redmine/tmp/restart.txt
Redmineのページ左上「管理」>「プラグイン」に「Redmine Github Hook plugin」が追加されたらOKです。
gitlabへDeploy Keyの登録
Redmineがgitlabから更新情報を持ってこれるように、Deploy Keyを登録します。
git cloneやgit fetchがRedmine側からできればいいので、gitlabに開発者と同じように"redmine"アカウントを作って、
SSH Keyを登録するやり方でもいいのかもしません(未検証)。
@redmineサーバ $ cd /home/redmine $ ssh-keygen -t rsa
作成されたid_rsa.pubの中身をgitlabのDeloy Keyに登録します。
redmineサーバにgitをclone
今回は/var/lib/repo
にgitのbareリポジトリを持ってきます。
# mkdir /var/lib/repo && chown -R redmine:redmine /var/lib/repo # su - redmine $ cd /var/lib/repo $ git clone --bare git@mygitlab.com:/root/test-pj.git
(余談)
ここはけっこうハマりました。。git cloneができずに以下色々試しました。
redmineの設定画面にてリポジトリパス登録
以下のように、「リポジトリのパス」を登録します。
Hookの設定
gitにpushしたタイミングなどでredmineに更新を反映させるために、gitlabのhookを使います。 登録したURLは 以下の通り。
https:// <redmineサーバのドメイン>/github_hook?project_id=<redmineでプロジェクト作成時に登録した識別子>
これでRedmineの当該プロジェクトの「リポジトリ」タブに遷移すると、連携できていました!
しかし、新しくpushしたブランチがRedmineに反映されないので、ログを確認。
# tail -f /var/lib/redmine/log/production.log I, [2015-09-16T16:48:10.665327 #16068] INFO -- : Current user: anonymous I, [2015-09-16T16:48:11.943218 #16078] INFO -- : Started POST "/github_hook?project_id=xxx" for 10.2.200.138 at 2015-09-16 16:48:11 +0900 E, [2015-09-16T16:48:14.618244 #16068] ERROR -- : GithubHook: Command 'git fetch origin' didn't exit properly. Full output: ["fatal: 'origin' does not appear to be a git repository\n", "fatal: The remote end hung up unexpectedly\n"]
'origin' does not appear to be a git repository
とか出てました。
結論として、以下のように対応しました。
@redmineサーバ git cloneしたディレクトリまで移動。 $ cd /var/lib/repo/cgttest-pj.git gitのリモートを確認 => 表示なし。。 $ git remote -v configを見てみる。 $ cat config [core] repositoryformatversion = 0 filemode = true bare = true originがどこか分からない状況みたいだったので、直接以下の通り登録。 $ git remote add origin git@mytgitlab.com:/root/test-pj.git configを見てみる。 $ cat config [core] repositoryformatversion = 0 filemode = true bare = true [remote "origin"] url = git@mygitlab.com:/root/test-pj.git fetch = +refs/heads/*:refs/remotes/origin/* gitのリモートを確認 => 表示! $ git remote -v origin git@mygitlab.com:/root/test-pj.git (fetch) origin git@mygitlab.com:/root/test-pj.git (push)
これでgitlab上の当該プロジェクトのWeb hooksの画面で、Test Hook ボタンを押してRedmineを確認したら、反映されていました。
半日使ってしまったが、解決してよかったです。(^^)
追記(2015/10/06)
上記は初めてRedmineとGitlabを連携したときのメモでした。
新しいプロジェクトをGitで作ったあとで、Redmineと連携するときのメモも残します。手順は下記。
- Gitlab / Redmine でプロジェクトの追加
- [Gitlab]Deploy Keysの追加(有効化)
- [Gitlab]Web Hooksの追加
- [Redmine]bareリポジトリの作成(サーバ上)
- [Redmine]リポジトリ項目の設定(Redmine上)
Gitlab / Redmine でプロジェクトの追加
※手順は省略します。
[Gitlab]Deploy Keysの追加(有効化)
Admin Area > Projects > [対象プロジェクトの]Editボタン押下 > Deploy Keys
このページに、既に登録してあるDeployKeyがあるので、「Enable」ボタンを押下します。
するとこう↓なります。
[Gitlab]Web Hooksの追加
Admin Area > Projects > [対象プロジェクトの]Editボタン押下 > Web Hooks
ページ下に「Add Web Hook」というボタンがあるので、project_id にRedmineで登録した対象プロジェクトの「識別子」を足して登録します。
https://[gitlab-domain]/github_hook?project_id=[redmine-sid]
[Redmine]bareリポジトリの作成(サーバ上)
Redmineが動いているサーバにて、bareリポジトリをCloneします。
@redmine サーバ $ cd /var/lib/repo $ git clone --bare git@mygitlab.com:/root/another-repo.git
[Redmine]リポジトリ項目の設定(Redmine上)
Redmineにて「設定」>「リポジトリ」タブ > 「新しいリポジトリ」リンクを押下します。
リポジトリでGitを選択、識別子にGitlabに登録したプロジェクト名、URLに先ほど作ったbareリポジトリのパス/var/lib/repo/another-repo.git
を追記して保存(その他の項目は任意)
これで連携できるようになりました。commitコメントにrefsをつけてコミットしたものがRedmineのチケットと紐づいたり、「リポジトリ」ページで更新差分が確認できたりできればOKです。