AWS上のRedmineでBitBucketのリポジトリを設定する


[Bitbucket](https://bitbucket.org/)は以前[記事](http://qiita.com/SYABU555/items/aa5016afc4cbfeb08821)にしたように、
無料でプライベートのリポジトリを作成できる素晴らしいサービスです。

このBitBucket上のリポジトリを、
AWSのRedmineでリアルタイムに参照可能にすることが最終目標です。
（AWSのRedmine設置は[こちら](http://qiita.com/SYABU555/items/916d27313e6d82041f6b)）

なお、私の環境はbitnami産のRedmineですので、
みなさんの環境とは少し勝手が違うかもしれません。
そこらへんはご了承ください。

## 0. 全体構成

BitbucketとRedmineをリンクするにあたり、
まず全体構成を見てから実際の作業に移ろうと思います。

![スクリーンショット 2015-07-23 21.15.16.png](https://qiita-image-store.s3.amazonaws.com/0/85214/aad685d8-0646-d762-db37-15ca9d6eb4ff.png "スクリーンショット 2015-07-23 21.15.16.png")


bitbucket はプライベートリポジトリなので
パスワードなしでリアルタイムにbitbucketから取得するには
SSHの認証も必要です。

まとめますと必要なものとしては以下になります。
>
1. プラグインを導入する
2. SSH通信に必要なキーを用意する
3. BitbucketにSSHキーを設定する
4. SSH通信して認証しておく
5. BitbucketにPOST設定する
6. Redmineとリポジトリを紐づける

では順を追っていきましょう。

## 1. プラグインを導入する

### 1-1. インストール（cloneで取得）
この[プラグイン（bitbucket-redmine）](http://www.redmine.org/plugins/redmine_bitbucket)を導入します。
bitnamiのRedmineのプラグインフォルダは[~/apps/redmine/htdocs/plugins]です。

> 
$ cd ~/apps/redmine/htdocs/plugins
$ git clone git@bitbucket.org:steveqx/redmine_bitbucket.git
$ rake redmine:plugins NAME=redmine_bitbucket RAILS_ENV=production
※Redmine再起動！

Redmineにプラグインが表示されていればOKです。
![スクリーンショット 2015-07-23 22.19.07.png](https://qiita-image-store.s3.amazonaws.com/0/85214/14ee4def-8ffc-f946-0c7d-b1054ab0f27c.png "スクリーンショット 2015-07-23 22.19.07.png")

### 1-2. Bitbucketリポジトリをcloneする場所を作成

次にcloneしておく場所を作成しておきます。
以下のパスは一例です。

>$ cd ~/apps/redmine
$ sudo mkdir bitbucket_repos
$ sudo chown bitnami:daemon bitbucket_repos

### 1-3. プラグインの設定

最後にプラグインの中に、ローカルリポジトリを入れるパスを指定します。
導入したプラグインの設定からローカルリポジトリパスに先ほど作成したディレクトリをフルパスで入れちゃいましょう。

![スクリーンショット 2015-07-23 22.23.05.png](https://qiita-image-store.s3.amazonaws.com/0/85214/8c016957-3510-823a-20e3-acc754d904d9.png "スクリーンショット 2015-07-23 22.23.05.png")

## 2. SSH通信に必要なキーを用意する 

これはRedmineからBitbucketにリポジトリ参照する際に利用します。
[こちらのサイト](http://morizyun.github.io/blog/ssh-key-bitbucket-github/)を参考にさせていただきました。

Redmineのサーバにアクセスし、SSH通信に必要なキーを作成します。

>cd ~/.ssh
ssh-keygen -t rsa -C [mail address]

保存先、パスワードを聞かれますがどちらもEnterを押してください。

## 3. BitbucketにSSHキーを設定する

先ほど作成したSSHキーをBitbucketに登録します。

>Bitbucketログイン > 右上人間マーク > アカウント管理 > SSHキー > 鍵の追加

内容はRedmineサーバ上から出力してコピーしてください。

>例
>$ cat ~/.ssh/id_rsa.pub

複数のリポジトリを参照できそうな以下プラグインを利用することにします。

## 4. SSH通信して認証しておく

bitnamiのRedmineは、WEBからのリクエストに対してdaemonユーザで動きます。
[ここ](https://community.bitnami.com/t/redmine-problems-syncing-with-bitbucket-repository/20411)らへんを見ますと、一度daemonユーザに切り替えた上でSSH通信をして認証する必要があるようです。

まず、手順１で作成したSSHキーをdaemonが使うディレクトリにコピーします
>※/usr/sbin がdaemon のホームディレクトリのようです
$ cd /usr/sbin
$ sudo mkdir .ssh
$ sudo cp ~/.ssh/id_rsa* .ssh
$ sudo chown -R daemon .ssh

あとはdaemonに無理くり切り替えてアクセスしてやります

> $ sudo -u daemon /bin/bash
$ ssh -T git@bitbucket.org

結果が以下のようになっていればOKです。
確認できたらexitで終わっておきましょう。
>logged as [ユーザ名]. 
You can use git or hg to connect to Bitbucket. Shell access is disabled.

## 5. BitbucketにPOST設定する

まずRedmine側で、WebAPI用のキーを発行します。
> ログイン > 管理 > 設定 > リポジトリタブ
・「リポジトリ管理用のWebサービスを有効にする」をチェック
・「APIキー」の横にある「キーの生成」をクリック
・「保存」後、APIキーをコピーする

次にBitbucket側に利用するPOST URLを登録します。
> ログイン > プロジェクト選択 > Services > Add service > POST
・URLに「http://[Redmine url]/hooks/bitbucket/[Redmine project name]?key=[APIキー]」を入力
それぞれの設定により変わりますが、こんな感じになります。
http://www.redmine.test/hooks/bitbucket/project?key=IKIMONOGAKARI555

>なお、httpsに対応している場合はhttpsにすることを推奨します


## 6. Redmineとリポジトリを紐づける

### 6-1. 実際にpushしてみる

どのようにpushするかはここでは割愛します。
対象のプロジェクトをPCでcloneし、試しになにかpushしてみてください。

ログをみてエラーが発生していなければ成功と考えていいです。
> $ cat ~/apps/redmine/htdocs/log/production.log 

以下のようなエラーが表示されていれば、
SSHキー認証を疑ってください。
「Host key verification failed.」
「Permission denied(public key).」

### 6-2. Redmineにリポジトリ登録

ここまでくると、Redmineのリポジトリ一覧に
ひとつリポジトリが追加されていると思います。
（ユーザ名_プロジェクト名）

このリポジトリを利用します。
これで参照も可能になりました。

### 6-3. もう一度pushして確認しておく

手順6-1と同じく、何かしらpushして確認してみましょう。
無事にRedmine上に反映されていれば問題ありません。


## x. 最後に

参考URLとは違う気もしますが…
これでひとまず手元では動きました。

お疲れ様でした！

※追記
手順6-2で同じパスのリポジトリを作成する旨を記載していましたが、不要でした。