前回の続き
せっかく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が存在するものとする。
[code lang=”xml”]
Host gitolite
HostName localhost
User gitolite-user
IdentityFile ~/.ssh/gitolite-user.pem
Port 22
[/code]
作成した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 work_user git fetch origin
[/code]
作成したフックスクリプトに実行権限を付与。
[code lang=”bash” gutter=”off”]
$ chmod 700 ~/repositories/repo-practice.git/hooks/post-receive
[/code]
以上で、RedmineとGit(Gitolite)の連携設定は完了。
後は、リポジトリにコミット&プッシュして、変更が反映されているかを確認すればOK。
Gitのコミット&プッシュ内容をRedmineのチケットに連動させる
続いて、Gitのコミット&プッシュ時にチケットと連動させる方法。
- Redmineに管理者ユーザでログイン
- Redmineで「管理」の「設定」画面を開き、「リポジトリ」タブを開く
- 「使用するバージョン管理システム」で「Git」チェックをON
- 「コミットを自動取得する」チェックをON
- 「リポジトリ管理用のWebサービスを有効にする」チェックをON
- 「APIキー」後で使用するので、キーの生成を行いAPIキーを控えておく
- 「参照用キーワード」に「refs,references,IssueID,*」を設定
- 保存ボタンをクリック
これだけでも問題ないが、これだとリポジトリ画面を開くまでチケットと連動しない。
そこで、post-receiveファイルに以下の処理を追記する。
[code lang=”bash” gutter=”on”]
wget -O – http://localhost/redmine/sys/fetch_changesets?key=作成したAPIキー
[/code]
これで、コミット&プッシュした時のコメントに「refs #999」などの記述があれば、
自動で#999のチケットに連動する。
コメント