カテゴリー
オープンソース システム関連

RedmineとBitbucket(Gitレポジトリ)を連携させる

仕事で使用しているRedmine(一人チケット管理だけど)とBitbucketのレポジトリとの連携の設定をしてみます。やってみると、つまづいた点がありましたので、メモとして残しておきます。

参考にしたのは以下のサイトです。

今回行った手順を簡単に説明すると以下の通りです。コマンドなどの詳細の手順は各サイトをご覧ください。

  1. Redmineにredmine_github_hookプラグインをインストールする。
  2. RedmineのサーバーにBitbucketリポジトリからmirrorリポジトリでcloneしておく。そのときgit remoteは、後で認証が面倒になるのでhttpsではなくsshで指定しておく。cloneはサーバーのredmineのアカウントで行う。
  3. Bitbucketリポジトリからfetchできるように、ssh-genkeyでパスワード無しで公開キー、秘密キーを作成する。公開キーをBitbucketに登録しておく。実際にfetchできるかテストしておく。
  4. Redmineでリポジトリの設定をする。設定はRedmine全体の設定とプロジェクト個別のリポジトリの設定がある。設定できたらプロジェクトのリポジトリが参照できるか見てみる。サイトが今どきUTF-8ではなくシフトJISだからリビジョンの差分が文字化けしてしまうので、全体の設定-ファイル(どういう訳かリポジトリではない)で、添付ファイルとリポジトリのエンコーディングをutf-8,cp932,euc-jpに設定しなければいけない。差分を表示をインラインにすると文字化けするが、横に並べるにすると正常に表示される(これは不明)。また、リポジトリが大きいとプロジェクトのリポジトリのページはInternal Errorになるが、しばらくすれば参照できる(これで最初諦めかけた・・・)。
  5. BitbucketのリポジトリのWebhooksの設定をして、commitするとredmineのレポジトリが更新されるようにしておく。何かcommitしてBitbucketにpushすると、Redmineのレポジトリが更新されるかを確認する。
  6. 連携する前のRedmineの各チケットとリビジョンと関連付けを行う。

以上は各サイトのいいどころ取りしたものです。それぞれ自分のサイトに合わせて設定してください。

以上ですと、Redmineからレポジトリを参照できるだけですので、BitbucketとSourceTreeでも使いやすいようにRedmineの連携も設定します。

BitbucketからRedmineのチケットIDとリンクするには、リポジトリの設定のリンクで

Link URL: https://[redmineのドメイン]/issues/\1
Link Key : #(\d+)

とします。これでBitbucketページ内で#チケット番号をクリックすれば、Redmineの該当する番号のチケットページが表示します。

同様にSourceTreeの設定-詳細で、コミットメッセージ中のリンクで

置換タイプ : その他
正規表現 : (\d+)
リンク先 URL : https://[redmineのドメイン]/issues/$1

と設定すると、コミット内のメッセージに出てくる#チケットIDをクリックすれば、Redmineの該当する番号のチケットページが表示できるようになります。

実現できなかったことは、Redmine内のレポジトリのハッシュからBitbucketのコミットにリンクの方法でした。何かよりRedmineのブラグインがあるのでしょうか?

追記(2020年5月7日)

RedmineとSourceTreeの連携ですが、以上はWindowsの設定方法です。Macの場合は違います。リンク先ではなく置換される文字列となりますので、HTMLのリンクとなります。例えば、以下のようになります。

正規表現パターン : #(\d+)
と置き換えます : <a href="https://[redmineのドメイン]/issues/$1">#$1</a>

ただし、自分のところではブラウザが起動せずに、そのままのビューでRedmineになってしまいます。何かまだ問題がありそうです。

SourceTree で JIRA 課題や GitHub や Bitbucket Cloud Iss… – Atlassian CommunitySourceTree で JIRA 課題や GitHub や Bitbucket Cloud Iss… – Atlassian Community

Atlassian Community 

追記(2020年9月30日)

あれからBitBucketをやめて、QNAPのContainer StationにGitLabをコンテナで立てた。上記の記事中のgit remoteは、sshではなくHTTPSでアクセスさせている。

QNAPのファームウェアをアップデートして再起動したら、RedmineとGitLabの連携がうまくいかなくなった。

いろいろと調べてみると、Redmineからgit pullができていない。原因は、GitLabのコンテナのIPアドレスが違うアドレスになっていて、RedmineからGitLabのコンテナにアクセスできなくなっていたのが原因だった。たまたま今までQNAPを再起動してもGitLabのコンテナのIPアドレスが変わらなかったようだ。まあ、考えてみると当たり前である。~/.ssh/configで直接IPアドレスを指定していたのが敗因である。

そこで、~/.ssh/configを

Host gitlab                                                                                                                                                                                       
  Hostname gitlab__1     # アクセスできるホスト名                                                                                                                                                                      
  # Hostname 172.29.0.3    直接IPアドレスをしているのはやめる。                                                                                                                                                                       
  IdentityFile ~/.ssh/id_rsa                                                                                                                                                             
  User git 

のようにコンテナのホスト名に変更しておいた。これで、GitLabのコンテナを再起動しても大丈夫のはず。git remoteのほうは、

$ git remote -v                                                                                                                           
origin  git@gitlab:user-name/xxx.git (fetch)                                                                                                                                                      
origin  git@gitlab:user-name/xxx.git (push)   

のようにしている。

ちなみにRedmineとGitLabのコンテナは同じネットワークに存在している。これが重要である。