GitLab と Redmine を紐付けるツールを作りました

雑記Tech

この記事は、GitLab Advent Calendar 2017 の24日目です。

「GitLab Issue」と「Redmine チケット」を紐付けるツールを作ったお話です。
ピンポイント過ぎて需要はないと思いますが、GitHub 上で公開中です。

背景

とあるプロジェクトでは GitLab と Redmine を活用していました。
通常であれば、GitLab と Redmine を連携させるところですが、残念ながら大人の事情やセキュリティの都合で実現ができない環境です。

Excel でチケットを紐付けて管理する辛い状態 が続いており、ツールを開発することで自動化を試みたという背景があります。

何ができるのか

次のような機能を実装しています。

  • 複数プロジェクトの Issue を一括表示
  • 任意の項目でソート
  • フリーワード検索
  • Redmine チケットと紐付け
  • CSV エクスポート

画面サンプル
Issues Listの動作イメージ(一覧)

CSV 出力例
Issues Listの動作イメージ(CSV出力)

動画で見たほうが早いかも。

使用技術

開発言語

HTML5 + JavaScript のシンプルな構成です。PC ローカルに入れてもよし、適当な Web サーバやファイルサーバに置いても動きます。

フレームワーク

ほぼ全ての処理を AngularJS で書いています。デザイン面では、Bootstrap や Font Awesome も一部利用しました。

GitLab API

Issue を引っ張ってくる部分や、グループ・プロジェクトに関する情報は GitLab API から取得しています。開発中に API v4 が出たため、v4 を利用しています。

紐付け方法

GitLab Issue の中に、Redmine チケット番号があると勝手にひも付きます。

RedmineとGitLabの紐付け

RedmineとGitLabの紐付け2

内部処理は単純で、タイトルもしくは本文内に規定フォーマット (#12345) があれば、チケット番号として認識します。

苦労した点と課題

非同期処理

通信を非同期で処理する必要があったため、初めて promise とやらに出会いました。使いかたがよく分からず、詳しい友人に教えてもらうことで何とか解決。

Issue のページャ

GitLab API から取得する場合、デフォルトだと20件まで しか情報が得られません。
複数のプロジェクト分を一括で表示しているため、途中まで全く気が付きませんでした。あれ?何か足りないような…… と調べて発覚。

時間の都合で2ページ目以降の取得は見送りました。
さすがに20件では少ないため、取得単位を100件に引き上げて各プロジェクト上位100件のみ取得しています。

API コール数

リロードする度に API を呼ぶため、あまり優しくない作りです。
自前の GitLab であればそんなに問題ありませんが、公開版の gitlab.com では少し注意が必要です。

まとめ

  • GitLab と Redmine を紐付けるツールを作りました
  • Issue とチケットが勝手にリンクします
  • AngularJS で動いています
  • プロジェクト横断で Issue を表示・検索できます
  • 可能であれば GitLab と Redmine の連携機能を活用しましょう

雑記Tech