以前EC2にインストールしたRedmineとGit(Gitolite)を連携させる話。
意外に時間がかかってしまった。
ハマってたってのもあるけど、それ以上にサボってたのがでかい。
さて、本題。
はじめに
- Redmineには元々GitやSVNのバージョン管理ソフトとの連携機能がある。(プラグインは不要)
- Redmineに連携するためには、Redmineのサーバ上にbareリポジトリが必要
- Redmineの設定で使用する「リポジトリのパス」はRedmineのサーバに作ったローカルリポジトリのパス
- GitだろうとGitoliteだろうと、連携のさせ方は同じ。(ローカルリポジトリの作成の仕方が違うだけ)
準備
- Redmineで練習用のプロジェクト「prj-practice」を作成する
- 「prj-practice」と連携するためのリポジトリ「repo-practice」を作成する
- Redmineから連携できたときに確認できるよう、何かしらソースをコミット&プッシュしておく
- Redmineの実行ユーザ(※1)をGitoliteのユーザとして追加しておく
Redmineの実行ユーザがEC2からssh経由でGitoliteに アクセスできるように設定する
EC2からssh経由でGitoliteにアクセスするためには、秘密鍵等のアクセス設定が必要。
Redmineの実行ユーザがリポジトリを同期できるように、以下のように設定する。
- インスタンス生成時に作成した秘密鍵「ec2-user.pem」をサーバー(仮に~/.ssh/ec2-user.pem)に配置する。
- ~/.ssh/configファイルを作成
[code lang=”xml”]
Host localhost
HostName localhost
User ec2-user
IdentityFile ~/.ssh/ec2-user.pem
Port 22
[/code] - ec2-user.pemとconfigのパーミッションを600に変更(※これ重要)
Redmine用のローカルリポジトリの作成
Redmineからアクセス可能なリポジトリを作成するため、Redmineの実行ユーザで、ディレクトリを作成する。
[code lang=”bash” gutter=”off”]
$ cd /var/lib/redmine
$ mkdir repositories
[/code]
redmineからアクセスできるbareリポジトリを作成する。
[code lang=”bash” gutter=”off”]
$ cd repositories
$ git clone –mirror gitolite-user@localhost:repo-practice.git
[/code]
Redmine側の設定
- Redmineでプロジェクトの「設定」画面を開き、「リポジトリ」タブの項目「バージョン管理システム」で git を選択
- 「リポジトリのパス」に「/var/lib/redmine/repositories/repo-practice.git」を設定
- 「ファイルとディレクトリの最新コミットを表示する」チェックをON
- 作成ボタンをクリック
この状態で「リポジトリ」タブを確認すると、最初にコミット&プッシュされた状態が確認できる。
ただし、このままだとリポジトリが更新されても、Redmine用のリポジトリに同期されない。
自動的に同期するにはもうひと手間かけてやる必要がある。
Gitolite実行ユーザのsudo設定
Redmine用のリポジトリの同期(fetch)はRedmineの実行ユーザで行う必要がある。
しかし、リポジトリの更新を検出できるのはGitoliteの実行ユーザ。
そこで、Gitolite実行ユーザからsudoでRedmine用のリポジトリを同期できるように設定する。
- 「sudo visudo」コマンドで設定ファイルを編集
- Gitolite実行ユーザからgitコマンドだけはパスワードなしでsudoできるように
設定ファイルに以下を追記
[code lang=”xml”]
gitolite-user ALL=(ALL) NOPASSWD: /usr/bin/git
[/code]
フックスクリプトの作成
リポジトリが更新されたことを検出するために、フックスクリプトを作成する。
フックスクリプトはGitoliteのリポジトリに作成する必要があるため、Gitoliteの実行ユーザで作業する。
[code lang=”bash” gutter=”off”]
$ sudo su gitolite-user
$ vim ~/repositories/repo-practice.git/hooks/post-receive
[/code]
フックスクリプト(post-receive)の中身
[code lang=”bash” gutter=”on”]
#!/bin/bash
cd /var/lib/redmine/repositories/repo-practice.git
sudo -u ec2-user git fetch origin
[/code]
作成したフックスクリプトに実行権限を付与。
[code lang=”bash” gutter=”off”]
$ chmod 700 ~/repositories/repo-practice.git/hooks/post-receive
[/code]
以上で、RedmineとGit(Gitolite)の連携設定は完了。
後は、リポジトリにコミット&プッシュして、変更が反映されているかを確認する。
これで、ようやくALMiniumっぽくなったかな?
※1私の場合、Redmineをec2-userでインストールしたので、ec2-userでやった。
これに気づくまでapacheユーザで作業していて、かなりハマった。
どのユーザでRedmineが実行されているかわからなければ、以下のコマンドで確認する。
[code lang=”bash” gutter=”off”]
$ ps -ef|grep redmine
[/code]
コメント