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ファイルを作成
    Host localhost
        HostName localhost
        User ec2-user
        IdentityFile ~/.ssh/ec2-user.pem
        Port 22
    
  3. ec2-user.pemとconfigのパーミッションを600に変更(※これ重要)

 

Redmine用のローカルリポジトリの作成

Redmineからアクセス可能なリポジトリを作成するため、Redmineの実行ユーザで、ディレクトリを作成する。

$ cd /var/lib/redmine
$ mkdir repositories

redmineからアクセスできるbareリポジトリを作成する。

$ cd repositories
$ git clone --mirror gitolite-user@localhost:repo-practice.git

 

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できるように
    設定ファイルに以下を追記

    gitolite-user   ALL=(ALL)       NOPASSWD: /usr/bin/git
    

 

フックスクリプトの作成

リポジトリが更新されたことを検出するために、フックスクリプトを作成する。
フックスクリプトはGitoliteのリポジトリに作成する必要があるため、Gitoliteの実行ユーザで作業する。

$ sudo su gitolite-user
$ vim ~/repositories/repo-practice.git/hooks/post-receive

フックスクリプト(post-receive)の中身

#!/bin/bash
cd /var/lib/redmine/repositories/repo-practice.git
sudo -u ec2-user git fetch origin

作成したフックスクリプトに実行権限を付与。

$ chmod 700 ~/repositories/repo-practice.git/hooks/post-receive

以上で、RedmineとGit(Gitolite)の連携設定は完了。
後は、リポジトリにコミット&プッシュして、変更が反映されているかを確認する。

これで、ようやくALMiniumっぽくなったかな?

 
 
※1私の場合、Redmineをec2-userでインストールしたので、ec2-userでやった。
これに気づくまでapacheユーザで作業していて、かなりハマった。
どのユーザでRedmineが実行されているかわからなければ、以下のコマンドで確認する。

$ ps -ef|grep redmine

 
 


この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL