仕事で使用しているRedmine(一人チケット管理だけど)とBitbucketのレポジトリとの連携の設定をしてみます。やってみると、つまづいた点がありましたので、メモとして残しておきます。
参考にしたのは以下のサイトです。
Redmineのブログサイトです。
Redmineの公式サイトです。
今回行った手順を簡単に説明すると以下の通りです。コマンドなどの詳細の手順は各サイトをご覧ください。
- Redmineにredmine_github_hookプラグインをインストールする。
- RedmineのサーバーにBitbucketリポジトリからmirrorリポジトリでcloneしておく。そのときgit remoteは、後で認証が面倒になるのでhttpsではなくsshで指定しておく。cloneはredmineのアカウントで行う。
- Bitbucketリポジトリからfetchできるように、Redmineのサーバーでredmineのアカウントでssh-genkeyでパスワード無しで公開キー、秘密キーを作成する。公開キーをBitbucketに登録しておく。実際にfetchできるかテストしておく。
- Redmineでリポジトリの設定をする。設定はRedmine全体の設定とプロジェクト個別のリポジトリの設定がある。設定できたらプロジェクトのリポジトリが参照できるか見てみる。サイトが今どきUTF-8ではなくシフトJISだからリビジョンの差分が文字化けしてしまうので、全体の設定-ファイル(どういう訳かリポジトリではない)で、添付ファイルとリポジトリのエンコーディングをutf-8,cp932,euc-jpに設定しなければいけない。差分を表示をインラインにすると文字化けするが、横に並べるにすると正常に表示される(これは不明)。また、リポジトリが大きいとプロジェクトのリポジトリのページはInternal Errorになるが、しばらくすれば参照できる(これで最初諦めかけた・・・)。
- BitbucketのリポジトリのWebhooksの設定をして、commitするとredmineのレポジトリが更新されるようにしておく。何かcommitしてBitbucketにpushすると、Redmineのレポジトリが更新されるかを確認する。
- 連携する前の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になってしまいます。何かまだ問題がありそうです。
追記(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のサーバーに公開キーを登録しないといけないということを忘れて手こずりました。