Redmine
GitLab

GitlabとRedmineを連携させる方法の覚書。

More than 2 years have passed since last update.

追記(2016/1/20)

タイポしてたみたいですね、すみません。
「Redmineに Redmine Github Hook Pluginをインストールする。」の項目で、redmine_github_hook.gitのurlをミスっていたようです。
指摘してくれた方、ありがとうございます。

前提

  • RedmineとGitlabが別サーバで用意されている。
  • Gitlabへgitユーザが存在し、developerグループへ所属している。
  • ファイルパスなどはデフォルトのものを利用しているので、適宜読み替えてください。

Redmineに Redmine Github Hook Pluginをインストールする。

次のコマンドを実行。

cd /opt/redmine/plugins
git clone git://github.com/koppen/redmine_github_hook.git
touch /opt/redmine/tmp/restart.txt

ブラウザでredmineにアクセスするとredmineが再起動され、プラグインがインストールされる。

プロジェクトにリポジトリを設定

Redmineの対象プロジェクト(Sampleプロジェクトとする)の設定 > リポジトリから新しいリポジトリを設定する。
※ここでは、bareかつローカルなリポジトリしか設定できない。そのため、redmineとgitlabのサーバが別々に存在する場合、以下の作業をする必要がある。

Gitlabサーバからアクセスするためのユーザを用意

useradd -m redmine-git

rsa鍵認証により、Gitlabサーバのgitユーザからこのユーザに対しパスワードなしでログインできるようにしておく。

対象プロジェクトをRedmineサーバにクローン

mkdir -p /var/git/repos/
cd  /var/
chown redmine-git:redmine-git git -R
su redmine-git
cd /var/git/repos
git clone git@gitlab-server.com:sample.git

プロジェクトにリポジトリを設定

プロジェクトに対し、2.2でクローンしたリポジトリを設定する。
Redmineのプロジェクトページにリポジトリの項目があるので、そこで指定する。

Gitlabへコミット > Redmineのリポジトリへ反映

このままではGitlabにあるリポジトリとRedmineのリポジトリが連携されないので、pushされたらRedmineサーバの方へ反映させてやる必要がある。
Gitlabサーバの方で、custom githookを利用しコミット直後にRedmineサーバの方へpushしてやるようにする。

cd /var/opt/gitlab/git-data/repositories/sample.git
mkdir custom_hooks
touch custom_hooks/post-receive
chown git:developer custom_hooks
chown git:developer custom_hooks/post-receive
chmod +x custom_hooks/post-receive
vi  custom_hooks/post-receive

post-receiveの中身は以下

# すべてのブランチをredmineサーバへpush
git push ssh://redmine-git@myredmine.com/var/git/repos/sample.git refs/heads/*:refs/heads/*

以上の行程で、別サーバに存在するGitlabのリポジトリとRedmineのリポジトリの連携はできた。

GitlabへRedmineとの連携を設定する。

Sampleプロジェクトの Settings > WebHooks へRedmineのWebhookを設定する。
URLは以下のようにする({project_id}はRedmineでリポジトリを登録する時に設定した識別子)。

http://myredmine.com/github_hook?project_id={project_id}

また Settings > ServiciesのRedmineを設定する。項目はそれぞれredmineのトップ、ticketページ、新しいticketを発行するページを指定してやる。

ticketとコミットが即座に連携されるようにする。

ここまでの状態で連携設定は完了。しかし、このままコミットしても、一旦Redmineのリポジトリタブにアクセスしないとticketとの紐付けがされない。そのためコミット直後にその反映を行う必要がある。
Gitlabサーバでcustom git hookに追記する。

cd /var/opt/gitlab/git-data/repositories/sample.git
vi  custom_hooks/post-receive 

以下の行を末尾へ追加。({api_key}は、Redmineの管理 > 設定 > リポジトリ のAPIキー)

wget -q -O /dev/null https://myredmine.com/sys/fetch_changesets?key={api_key}&id={project_id}

以上で連携設定は完了。