AWS(EC2)でRedmineとGit、Jenkinsを使ったWordPress開発環境の構築と公開を行う
(その5-GitとRedmineの連携)

握手

前回の続き
せっかくRedmineとGitをインストールしたので、お互いを連携させたい。
ただ、注意したいのだけれどRedmineとGitの連携は以下の2種類が存在する。

  • RedmineからGitのリポジトリ内容が確認できるようにする
  • Gitのコミット&内容をRedmineのチケットに連動させる

ま、どっちもやっておこう。

RedmineからGitのリポジトリ内容が確認できるようにする

Redmineには元々GitやSVN等のバージョン管理ソフトとの連携機能がある。(プラグインは不要)
ただし、そのためにはRedmineのインストールされているサーバ上にbareリポジトリが必要。
ここでは、Redmine練習用のプロジェクト「prj-practice」と
Git練習用のリポジトリ「repo-practice」を連携させる。

 

Redmineの実行ユーザがssh経由でGitoliteにアクセスできるようにする

Redmineの実行ユーザ(このサイトではwork_user)が
sshでGitにアクセスできるよう、~/.ssh/configファイルを作成する。
ユーザー作成時に作成した、~/.sshディレクトリとwork_user.pemが存在するものとする。

Host gitolite
    HostName localhost
    User gitolite-user
    IdentityFile ~/.ssh/gitolite-user.pem
    Port 22

作成した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側の設定

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 work_user git fetch origin

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

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

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

Gitのコミット&プッシュ内容をRedmineのチケットに連動させる

続いて、Gitのコミット&プッシュ時にチケットと連動させる方法。

redmineの設定

  1. Redmineに管理者ユーザでログイン
  2. Redmineで「管理」の「設定」画面を開き、「リポジトリ」タブを開く
  3. 「使用するバージョン管理システム」で「Git」チェックをON
  4. 「コミットを自動取得する」チェックをON
  5. 「リポジトリ管理用のWebサービスを有効にする」チェックをON
  6. 「APIキー」後で使用するので、キーの生成を行いAPIキーを控えておく
  7. 「参照用キーワード」に「refs,references,IssueID,*」を設定
  8. 保存ボタンをクリック

これだけでも問題ないが、これだとリポジトリ画面を開くまでチケットと連動しない。
そこで、post-receiveファイルに以下の処理を追記する。

wget -O - http://localhost/redmine/sys/fetch_changesets?key=作成したAPIキー

これで、コミット&プッシュした時のコメントに「refs #999」などの記述があれば、
自動で#999のチケットに連動する。


この投稿へのコメント

コメントはありません。

コメントを残す

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

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

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

トラックバック URL