5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

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


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

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

Redmineのブログサイトです。

Redmineの公式サイトです。

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

  1. Redmineにredmine_github_hookプラグインをインストールする。
  2. RedmineのサーバーにBitbucketリポジトリからmirrorリポジトリでcloneしておく。そのときgit remoteは、後で認証が面倒になるのでhttpsではなくsshで指定しておく。cloneはredmineのアカウントで行う。
  3. Bitbucketリポジトリからfetchできるように、Redmineのサーバーでredmineのアカウントで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のブラグインがあるのでしょうか?

著:湊川あい, 著:DQNEO
¥2,208 (2024/11/20 08:19時点 | Amazon調べ)
著:リック・ウマリ, 翻訳:吉川邦夫
¥3,247 (2024/11/20 08:19時点 | Amazon調べ)

追記(2020年5月7日)

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

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

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

追記(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_web_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のコンテナは同じネットワークに存在してます。これが重要でう。

追記(2021年7月7日)

BitbucketからGitlabに移行したけど、設定方法は基本的に同じです。

Redmineのサーバーでredmineアカウントで公開キー/秘密キーを作成してGitlabのサーバーに公開キーを登録しないといけないということを忘れて手こずりました。