RedmineをGitHubと連携させる

概要

先日インストールしたRedmineだが、gitレポジトリの登録はできるものの、その機能は十分とは言えない状況だ。

svnレポジトリの場合はユーザ名・パスワードを使って自動的にcheckoutできるようなのだが、gitレポジトリではそれができないようだ。 具体的には、gitの場合にはシステム上、すなわちサーバ上に存在するレポジトリのみを登録できるようになっている。いまだ開発途上ということだろう。

このため、GitHubと連携させるためには一手間が必要となる。

Redmineへのweb-hookプラグインの導入

gitが入っていなかったらsudo apt-get install git-coreで導入しておく。

GitHubからのweb-hookを使うためにはjsonを処理する必要があるため、json用のgemを導入しておく。

% alias sr="sudo -u redmine"
% cd /home/redmine/redmine
% sr vi Gemfile.local
gem "json" ← ★追加する
% sr bundle install --without development test

自分の環境ではjsonが2回以上あると怒られたので、すでにどこかで書いてあったようだ。実害はないのでいいが。

GitHub hookプラグインを導入する。

% cd /home/redmine/redmine/plugins
% sr git clone https://github.com/koppen/redmine_github_hook.git
% cd redmine_github_hook
% sr RAILS_ENV=production bundle install --without development test
% cd ../..
% sr RAILS_ENV=production bundle install --without development test

Redmineを再起動する。

% sudo /etc/init.d/redmine restart

Redmineに管理者アカウントでログインすれば、管理>プラグインでRedmine Github Hook pluginが見えるはず。

RedmineでのGitHubレポジトリの追加

GitHubのレポジトリを直接持ってくることはできないため、サーバ上でcloneしておく必要がある。 ここでは非公開レポジトリを想定してデプロイキーを使ってcloneすることにする。

まずはssh鍵を作成。nginx+unicornでredmineを起動しているので、redmineを実行しているユーザはredmineである。 このユーザ用のssh鍵を作成し、デプロイキーとして登録する。 ssh鍵の作成ではパスフレーズを設定してはいけない。

% cd /home/redmine
% alias sr="sudo -u redmine"
% sr mkdir .ssh
% sr chmod 700 .ssh
% sr ssh-keygen -t ecdsa

できあがった公開鍵/home/redmine/.ssh/id_ecdsa.pubをGitHubの当該レポジトリにデプロイキーとして登録する。

レポジトリ用のディレクトリを作成してcloneしておく。

% sr mkdir repos
% cd repos
% sr git clone --bare git@github.com/xxxxxx/hoge.git

Redmineにcloneしたレポジトリを追加する。 パスは/home/redmine/repos/hoge.gitとすれば良い。 この時点でレポジトリが表示できるはず。

あとはGitHubにweb-hookを登録すればOK。ここから未テスト。 URLはhttp(s)://debianサーバ/github_hook?project_id=[プロジェクトの識別子]とする。 当然ながらdebianサーバは外部からアクセスできるように設定しておく。