LoginSignup
6

More than 5 years have passed since last update.

Redmine on HerokuとBitbucketのGitプライベートレポジトリとの連携を実現するには

Last updated at Posted at 2016-09-27

チケット駆動開発、スクラムなどの開発体制をとる話の一部で、gitレポジトリとRedmineなどのイシュー管理システム(バグトラッキングシステム、チケット管理システム)とを連動させる話があります。

レポジトリにpushする際のcommit logに、チケット番号を記載し、それをpushされると、レポジトリとイシュー管理システムが連携をとり、当該チケットを完了としcloseする、というような連携の仕方をさせることができます。

無料で実現する

Bitbucketは、無料でプライベートレポジトリ(非公開レポジトリ)を利用できます
また、herokuは、一定のトラフィック(など)範囲内であれば無料で利用できるPaaSであり、Redmineを配置できます。Redmineをローカルのvagrantやdocker上に置いても良いのですが、それだとどこからでもアクセスできないのでHeroku上に置いています。

Redmineは、Railsで実装されており、RailsはRuby言語でできており、そのRuby言語の開発者のmatzさんがherokuにいるという関係なので、できないはずはないのです。

Redmine on herokuについては

いろいろなサイトで解説されていますので、herokuとRedmineの概要を理解していれば、なんとかできるかと思います。

RedmineとBitbucketを連携させる手順

私のほうで、先ほど(2016年9月19日AM1時)試して出来た方法が以下の通りです。
作業PCのOSは、Macです。

  1. Redmineのプラグインsteveqx / redmine_bitbucket — Bitbucketを利用します。(似たようなのがあるのでご注意ください。)
  2. ローカルのherokuルートフォルダ下pluginsに移動
  3. 当該プラグインをgit cloneします。$ git clone git@bitbucket.org:steveqx/redmine_bitbucket.git
  4. cloneして出来上がったフォルダのredmine_bitbucketに移動
  5. .gitフォルダを削除(heroku上でRedmineと違うgitレポジトリがあると別アプリと認識され、うまく動かないため)
  6. herokuルートフォルダに戻る
  7. ここで、tmpフォルダ以下に、あとで使うbitbucket_reposフォルダを作って、.gitkeepを置く(tmp以下で無いとファイルが保持されない)
    1. $ mkdir tmp/bitbucket_repos
    2. $ touch tmp/bitbucket_repos/.gitkeep
  8. $ mkdir .ssh で.sshフォルダを作成し、移動。 $ cd .ssh
  9. $ ssh-keygen -t rsa -C "bitbucketにユーザ登録しているメールアドレス"で、SSHキーペアを作成(生成先を聞かれるので、当該redmineルートフォルダ/.ssh/id_rsaを指定。パスフレーズも聞かれますが、無しでそのままEnterしてください。)
  10. id_rsaファイルのパーミッションを変更。 $ chmod 600 id_rsa
  11. id_rsa.pubの中身をコピー。$ cat id_rsa.pubで出てきたものをコピーしてもいいですし、$ pbcopy < ~/.ssh/id_rsa.pubとか。
  12. ブラウザでbitbucketにログイン。右上のアカウント管理をクリック→アカウント管理→右メニューのSSHキーをクリック
  13. 鍵を追加ボタンで、Labelは任意のもの。Keyにさきほどコピーしたid_rsa.pubの中身をペーストし、保存。
  14. herokuルートフォルダから、herokuにpush。
    1. $ git add .
    2. $ git commit -m "add plugin file and ssh key for bitbucket-redmine"
    3. $ git push heroku master
    4. など
  15. (pushに失敗していたら当該ファイルはアップロードされないのでご注意を。ちゃんとpush後に表示されるプロンプトを見て完了しているか見てください。)
  16. $ heroku run bashで、herokuレポジトリ内にssh
  17. ここからheroku内($の色が違うなど)
  18. $ ssh -T git@bitbucket.orgを実行し、(yes/no)を求められるのでyes(すいません適当で)。そうすると、Redmineルートフォルダ/.ssh/以下にknown_hostsファイルが作成されます。
  19. 当該known_hostsファイルは、ログアウトすると消えてしまうので、$ cat .ssh/known_hostsなどして出てきたのをコピー
  20. $ exitで、herokuからログアウト
  21. ここからローカル
  22. Redmineルートフォルダ下の.sshディレクトリ下に$ vi known_hostsなどでknown_hostsファイルを作成し、さきほどheroku内でコピーしたものをペーストする。(vi では、pをおせばペーストされます。)
  23. ふたたび、herokuルートフォルダから、herokuにpush。
    1. $ git add .
    2. $ git commit -m "add known_hosts"
    3. $ git push heroku master
    4. など
  24. ブラウザでRedmineにアクセスし、管理者アカウントで管理メニューを開き、プラグインを開いて、プラグインが表示されているか確認。(「Redmine Bitbucket plugin」があるか。)
  25. 当該プラグインの「設定」を開き、「Bitbucketサービスを有効化」にチェックが入っている、「自動cloneを有効化」にチェックが入っていることを確認。ローカルレポジトリパス「tmp/bitbucket_repos」であることを確認(tmp/を追記する必要がある)。
  26. 次に同じくRedmineの管理メニュー→設定→レポジトリから、gitが有効になっているか確認し、その下の「コミットを自動取得する」が有効か、「リポジトリ管理用のWebサービスを有効にする」が有効かを確認し、無効なら有効にする(チェックを入れる)
  27. その下のAPIキー部分の右側の「キーの作成」を押し、生成されたキーが入力されたら、画面下の[保存]ボタンで保存する
  28. ブラウザで、Bitbucketにログインし、連携させたいレポジトリの設定→Servicesを開く。右メニューからPOSTを選択し[Add service]をクリックし、URLを以下のルールで入力し、Saveする。
    1. Redmineの連携させたいプロジェクトにブラウザからアクセスするURLが、https://example.herokuapp.com/projects/hogehogeだとすると、
    2. https://example.herokuapp.com/hooks/bitbucket/hogehoge?key={上記でコピーしたRedmineのAPIキー}
    3. を入力

という感じです。

スクリーンショットも無く、分かりづらいかもしれないですが、どうも情報が錯綜していましたし、古いものも散見されましたので、一応手順のまとめでした。

問題

どうもしばらくすると消えてしまう問題が発生。どうしたらよいか。herokuの構造? なんとかできないか明日にでも検討予定。。。

追記
tmp/以下であればファイルが保持される。そのためtmp/以下にレポジトリを保存するように変更。どのくらい保持されるか、その他問題が無いかなどは不明。
→追記: dynoの再起動時に消去される。2016年6月から無料プランでもクレジットカードを登録すれば1000時間無料になったので24時間稼働は可能だが、何かの拍子で再起動したら消える。ただし、Redmine上には設定が残り、そのままだと再びpushしても連動してくれないため、Redmine上のレポジトリの設定を消去する必要がある。なかなかめんどい。

追記2
gitのpush時にコミットコメントに「close #3」などを追記で、連携してチケットをclose出来ない。なんでだろう。設定を見直し中。
→追記3:コミットメッセージを「close #3」などから始めることでpushでclose出来た。なるほど。(また複数チケットをcloseしたい場合は、「close #1 #2」などスペース区切りで。カンマ区切りだと動作しなかった。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6