AWS(EC2)にインストールしたRedmineとGit(Gitolite)を連携する

以前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の実行ユーザがリポジトリを同期できるように、以下のように設定する。

  1. インスタンス生成時に作成した秘密鍵「ec2-user.pem」をサーバー(仮に~/.ssh/ec2-user.pem)に配置する。
  2. ~/.ssh/configファイルを作成
    [code lang=”xml”]
    Host localhost
    HostName localhost
    User ec2-user
    IdentityFile ~/.ssh/ec2-user.pem
    Port 22
    [/code]
  3. 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側の設定

  1. Redmineでプロジェクトの「設定」画面を開き、「リポジトリ」タブの項目「バージョン管理システム」で git を選択
  2. 「リポジトリのパス」に「/var/lib/redmine/repositories/repo-practice.git」を設定
  3. 「ファイルとディレクトリの最新コミットを表示する」チェックをON
  4. 作成ボタンをクリック

この状態で「リポジトリ」タブを確認すると、最初にコミット&プッシュされた状態が確認できる。
ただし、このままだとリポジトリが更新されても、Redmine用のリポジトリに同期されない。
自動的に同期するにはもうひと手間かけてやる必要がある。

 

Gitolite実行ユーザのsudo設定

Redmine用のリポジトリの同期(fetch)はRedmineの実行ユーザで行う必要がある。
しかし、リポジトリの更新を検出できるのはGitoliteの実行ユーザ。
そこで、Gitolite実行ユーザからsudoでRedmine用のリポジトリを同期できるように設定する。

  1. 「sudo visudo」コマンドで設定ファイルを編集
  2. 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]

 
 

コメント

タイトルとURLをコピーしました