GitLabとRedmineを連携してみるの巻
はてなブログさんの開発フローのお話
少し前の話になるんですが、GitHubKaigiで
はてなブログさんの開発フローについて発表がありました。
その中で
当初はGitHubとRedmineを併用していたが、 両ツールの連携がイマイチだったので Redmineを止めてホワイトボードでタスク管理するようにした
という内容がありました。
https://speakerdeck.com/shibayu36/hatenaburogutimufalsekai-fa-hurotogithub
「ふむふむ、なるほどなぁ」という感じで非常に勉強になったのですが、
もしかしたら
「"GitLab+Redmine" ならツール自体が連携機能を持っている」
のでもう少しマシになるのかも?とも思いました。
そこで、GitLabとRedmineを使うと
一体どういうことが出来る様になるのか?といったところを紹介してみます。*1
弊社でも連携機能は一応有効にしているんですが、
まだまともには運用していないので
再確認の意味でメモを残しておこう、という意図もありますw
TL;DR
これらの設定を行うと…
事前設定: Redmine
Github Hookプラグインを導入しておく
GitHubという名前ですが、GitLabでも同じように使えます。
インストールは、リポジトリダウンロードして bundle install するだけでOKです。
https://github.com/koppen/redmine_github_hook
事前設定: GitLab
Issue TrackerでRedmine連携が選択できるようにしておく
gitlab.ymlにRedmine連携するための記述をしておく必要があります。
この設定をしておくと、Settingで IssueTracker にRedmineを選択できるようになります。
RPMインストールしているのであれば、
/etc/gitlab/gitlab.rb に以下の記述を追記するだけでOKです。
gitlab_rails['issues_tracker_redmine'] = true gitlab_rails['issues_tracker_redmine_title'] = "Redmine" gitlab_rails['issues_tracker_redmine_project_url'] = "http://<redmine_url>/projects/:issues_tracker_id/issues" gitlab_rails['issues_tracker_redmine_issues_url'] = "http://<redmine_url>/issues/:id" gitlab_rails['issues_tracker_redmine_new_issue_url'] = "http://<redmine_url>/projects/:issues_tracker_id/issues/new"
RedmineからGitLabリポジトリにアクセス出来るようにしておく
これは環境によってやることが異なるのですが、
もしもGitLabとRedmineが同じサーバであれば
GitLabリポジトリへのPermissionが適切に設定されていればよいでしょう。
RPMインストールしているのであれば、
/var/opt/gitlab/git-data/repositories 以下にリポジトリの実体があります。
Redmineを実行しているユーザから、このディレクトリが見えるかどうか確認しておきましょう。
GitLabとRedmine別々のサーバの場合、詳細は割愛しますが
GitLabのwebhookを駆使してRedmineのリポジトリに反映すれば良いでしょう。
プロジェクト発足時、GitLabとRedmineを連携するための最低限の設定
まず、プロジェクトを立ちあげた時に
最低限するべきことをリスト化してみます。
一体何が連携されるの?
GitLabコミットメッセージのissue番号がRedmineのissueとリンクする
コミットメッセージの「#????」という部分が、RedmineのIssueにリンクします。
ただ、少し前のバージョンでは普通にRedmineチケットへのリンクされていたのですが、
現バージョン(6.9.2)ではRedmineのチケットのリンクが上手く作成されないようです。
リンクを復活させるには $RAILS_ROOT/lib/gitlab/markdown.rbのこの行に
以下のようなモンキーパッチを当てます。*2
--- a/lib/gitlab/markdown.rb +++ b/lib/gitlab/markdown.rb @@ -178,7 +178,7 @@ module Gitlab end def reference_issue(identifier, project = @project) - if project.used_default_issues_tracker? || !external_issues_tracker_enabled? + if true if project.issue_exists? identifier url = url_for_issue(identifier, project) title = title_for_issue(identifier)
これおそらくJIRA連携を追加した時のバグだと思うのですが
英語力が足りなくて伝えられる気がしない…
Redmineのチケット連携機能がそのまま使える
たとえば、Issueに紐づくコミットの表示や、ステータスの変更/進捗率の変更なども
コミットメッセージから行うことが出来ます。
また、作業時間の連携も行えますので
コミットメッセージに設定した作業時間がチケットに反映され、
そのまま何もしなくてもプロジェクト毎/ユーザ毎の集計結果に反映されます。
実績管理も行っているプロジェクトではとても便利ですね。*3
ダッシュボート/スクラム開発 プラグイン
先のスライドではかんばんについても言及されていました。
そこで、Redmineでも同じようなことを実現するためのプラグインを紹介してみます。
- スクラム開発を支援したり、
- チケットをかんばんで表示したり、
- ドラッグアンドドロップで直感的にチケットを操作したり、
といった機能拡張を提供するものです。
他にも同じようなプラグインがいくつか存在しますが、更新が活発なものを厳選しました。
Redmine Backlogs v1.0.6
Redmineでスクラム開発を支援するためのプラグインです。
Redmineユーザの中では割とメジャーな気がします。
以下、RedmineのBacklogを利用した記事です。
Redmine Dashboard2
プロジェクト毎のタスクボードを提供します。
導入もかなり楽ですし、見た目/操作もわかりやすいので
単純にチケットのかんばんが欲しいだけならオススメ。
※以下、Gifzoで操作感を動画にしてみました
http://gifzo.net/l4gxyO45rI.mp4
Redmine ekanban
こちらもタスクボードを提供するプラグイン。
デモサイトあり。
http://ekanban-demo.herokuapp.com/
account: guest
password: redmine
その他連携プラグイン
Redmine OmniAuth
GitLabのOmniAuthでRedmineを追加します。
こちらを導入すると、GitLabのアカウント管理をRedmineアカウントに集約することが出来ます。
設定手順としては以下の通りです。
弊社でも設定済みですが、導入に結構手間取った記憶が…(※後で追記するかもしれない)
まとめ
GitLabとRedmineを連携するための設定と、
連携するとどういったことが出来るか、
を書いてみました。
もちろん「この機能を使えば何でも解決します!」ということではなく、
こういうやり方もあるんだなぁ、というゆるい感じで
選択肢の一つにしていただければと思います。