RedmineとGitlabを連携する方法

2018年03月20日

  • ITインフラ
  • QNAP機能紹介
前回は、Gitlabのインストール方法 > を紹介しました。
今回は『RedmineとGitlabを連携する設定手順』を説明します。

RedmineとGitlabを連携するメリット

Redmine、Gitlabを単体で使用しても便利なのですが、
その2つのツールを連携すると、さらに以下のようなことができるようになります。
  • Redmineの画面上からGitのリポジトリーが見える
    Redmine上で、最新リビジョンまでデータの差分を見ることができます。
  • Gitのリポジトリーへファイルをコミットする時にRedmineチケットの紐付けができる
    Redmineチケットにどのコミットが関連しているのかが確認できます。
    いつ、誰が、何をしたのか…も分かり易く表示されます。

概要

記事では以下の手順を紹介します。
RedmineとGitlabのインストールはSSH接続での操作を前提としています。
また、Redmine・Gitlabでのプロジェクト・チケットの作成、Gitのpush等一般的な操作の説明は省略します。

動作確認環境

製品 TS453Pro
バージョン QTS 4.2.1 Build 20160601

事前準備

RedmineとGitlabを連携するためには、Redmine側からGitlab側のリポジトリーを参照する必要があります。

RedmineコンテナーからGitlabコンテナーを直接参照することはできません。
QNAPのNASストレージ上にリポジトリーデータ用の共有フォルダーを作成し、両コンテナーのインストール時にマウント元として指定します。

今回のインストールする環境のイメージは以下のような形になります。
※補足※
下記のDocker hubの説明ではデータのマウント元には/srv/docker/gitlab/や/srv/docker/redmine/を指定していますが、QNAPで同様の設定を行うとNASストレージの特性上、再起動時に全てのデータが消えてしまいますので注意してください。
これからご説明する手順で作成した共有フォルダーであれば、再起動時もデータが残ります。
Docker hub (sameersbn/redmine) 
Docker hub (sameersbn/gitlab) 

手順

  1. ホーム画面から「File Station」アイコンをクリック
  2. ボリュームの右側に表示されるPlusアイコンをクリック
  3. 共有フォルダー名を入力、[作成]ボタンをクリック
ボリュームの下にフォルダーが生成されました。
作成した領域は "/share/フォルダー名" でアクセス可能です。

RedmineとGitlabのインストール時はデータ領域をこのフォルダーからマウントします。

Redmineのインストール

Redmine、MySQLのコンテナーをコマンドラインからインストールします。
この操作はSSH接続で行います。
各入力値の説明は以下のとおりです。
引数 説明
MySQL Name MySQLコンテナーの名前
Redmine Name Redmineコンテナーの名前
Redmine DB Root Pwd Redmine用DBのrootユーザーのパスワード
Redmine DB Name Redmine用DBの名前
Redmine HTTP Port No Redmineをブラウザーで使用するときのポート番号
Shared Folder Path 事前準備で作成したQNAPのNASストレージ上のフォルダーの絶対パス

手順

  1. リモートPCのターミナルから、adminアカウントでログイン
    リモートPCからSSH接続する手順 をご覧ください。
  2. RedmineとGitlabで使用するMySQLをインストール
    インストール時にはRedmineのデータベースを作成します。
    以下のコマンドを入力します。<>の入力値の説明は上の表を参照してください。
    $ docker run -d --name <MySQL Name>
    -e MYSQL_ROOT_PASSWORD=<Redmine DB Root Pwd>
    -e MYSQL_DATABASE=<Redmine DB Name>
    mysql:latest --character-set-server=utf8 --collation-server=utf8_general_ci
    --skip-character-set-client-handshake
  3. Redmine本体 インストール
    以下のコマンドを入力します。
    $ docker run -d -p <Redmine HTTP Port No>:80 --name <Redmine Name>
    -e DB_NAME=<Redmine DB Name> -e DB_PASS=<RedmineDB Root Pwd>
    --link <MySQL Name>:mysql -v <Shared Folder Path>:/home/git/data
    sameersbn/redmine:latest

Gitlabのインストール

Gitlab、Redisのコンテナーをコマンドラインからインストールします。 Redmineのインストール時に作成したMySQLコンテナーにGitlab用のデータベース、ユーザーを追加します。 この操作はSSH接続で行います。

各入力値の説明は以下のとおりです。
引数 説明
Redis Name Redisコンテナーの名前
MySQL Name MySQLコンテナーの名前(Redmineインストール時に決めたもの)
Redmine Name Redmineコンテナーの名前(Redmineインストール時に決めたもの)
Gitlab Name Gitlabコンテナーの名前
Gitlab DB User Gitlab用DBのユーザー名
Gitlab DB Pwd Gitlab用DBのパスワード
Gitlab DB Name Gitlab用DBの名前
Gitlab HTTP Port No Gitlabをブラウザで使用するときのポート番号
(Redmineや他のWebアプリと重複しないように番号を選択する)
Gitlab SSH Port No GitlabをSSH接続で使用するときのポート番号
Shared Folder Path 事前準備で作成したQNAPのNASストレージ上のフォルダーの絶対パス

手順

  1. リモートPCのターミナルから、adminアカウントでログイン
    リモートPCからSSH接続する手順 をご覧ください。
  2. Gitlabで使用するRedisをインストール
    以下のコマンドを入力します。<>の入力値の説明は表を参照してください。
    $ docker run --name <Redis Name> -d sameersbn/redis:latest
  3. MySQLへログイン
    以下のコマンドを入力します。
    $ docker exec -it <MySQL Name> bash
    $ mysql -uroot -psecret
  4. MySQLのデータベースへスキーマを追加
    以下のコマンドを入力します。
    mysql> CREATE USER '<Gitlab DB User>'@'%.%.%.%' IDENTIFIED BY '<Gitlab DB Pwd>';
    mysql> CREATE DATABASE IF NOT EXISTS `<Gitlab DB Name>` 
        -> DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
    mysql> GRANT ALL PRIVILEGES ON `<Gitlab DB Name>`.* 
        -> TO '<Gitlab DB User>'@'%.%.%.%';
    mysql> quit
  5. 以下のコマンドでGitlab本体をインストールします
    $ docker run --name <Gitlab Name> -d
     -p <Gitlab HTTP Port No>:80 -p <Gitlab SSH Port No>:22
     -e GITLAB_PORT=<Gitlab HTTP Port No> -e GITLAB_SSH_PORT=<Gitlab SSH Port No>
     -e DB_ADAPTER=mysql2 -e DB_HOST=mysql -e DB_NAME=<Gitlab DB Name>
     -e DB_USER=<Gitlab DB User> -e DB_PASS=<Gitlab DB Pwd>
     -e GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string
     --link <MySQL Name>:mysql --link <Redis Name>:redisio
     --link <Redmine Name>:redmine -v <Shared Folder Path>:/home/git/data
     sameersbn/gitlab:latest

Redmine-Gitlabの設定

インストールしたRedmineとGitlabそれぞれに連携するプロジェクトを作成し、設定を追加します。

プロジェクトの新規作成

ブラウザーからRedmineとGitlabにプロジェクトを作成します。作成の詳細な手順は省略します。
  1. ブラウザーからGitlabを開く
  2. rootのアカウントでログイン
  3. 連携用に新しいプロジェクトを作成
  4. ブラウザーからRedmineを開く
  5. adminのアカウントでログイン
  6. 連携用に新しいプロジェクトを作成

Redmineの設定

ブラウザーからRedmineの連携の設定を行います。また、Gitlabの設定に必要な情報を確認します。
  1. ブラウザーからRedmineを開く
  2. ページ右側:管理 > 設定 メニューを選択
  3. 「リポジトリ」タブ表示
  4. 以下のとおり設定
     
    項目名 入力値
    コミットを自動取得する チェックOn
    リポジトリ管理用のWebサービスを有効にする チェックOn
    APIキー APIキー値(または「キーの生成」から自動生成)
    ※APIキーはこの後Gitlab側へ設定するためメモしておく
  5. ブラウザーに以下のURLを入力
    http://QNAP IPアドレス:Redmine HTTPポート番号/projects/プロジェクト識別子.xml


     
  6. 表示されるXMLからプロジェクトID(idタグ)の数字を確認
    プロジェクトIDはこの後Gitlab側へ設定するため覚えておきます。
  7. Redmineの画面上から連携するプロジェクトを開く
  8. 「設定」タブ クリック
  9. 「リポジトリ」タブ クリック
  10. 「新しいリポジトリ」 リンククリック
  11. 以下のとおりリポジトリを作成
     
    項目名 入力値
    バージョン管理システム Git
    リポジトリのパス /home/git/data/repositories/GitlabのProjectの名前空間/GitlabのProject名
    ファイルとディレクトリの最新コミットを表示する チェックOn
  12. 設定後の画面から識別子名をクリック

     
  13. Gitlabのプロジェクトへ既にファイルをコミット済みの場合、ファイルとコミット履歴が表示されることを確認


    まだファイルをコミットしていない場合は404エラーが表示されます。

Gitlabの設定

ブラウザーからGitlabの連携の設定を行います。
  1. ブラウザーからGitlabを開く
  2. 連携するプロジェクトを開く
  3. Settings > Web hooks 選択
  4. URLを入力
    http://redmine/sys/fetch_changesets?key=APIキー&id=プロジェクトID



  5. [Add Webhooks] ボタン押下
  6. 追加されたWebhookの[Test Hook]ボタン押下


    成功すれば設定完了です。

Redmine-Gitlab連携確認

Gitlabのリポジトリーへファイルのpushを行い、Redmineに反映されるか確認を行います。
  1. Redmineのプロジェクト上で新規チケットを作成
  2. Gitlabのプロジェクトのリポジトリーへファイルのpush
    コミット時にコメントの先頭に"refs #Redmineチケット番号"と記入します。
    ※今回は簡易的に動作確認を行うために、ブラウザーからRedmineチケット#2に紐付けてREADMEファイルをpushしました。



  3. Redmineチケット#2を開く
    関連しているリビジョンにコミット履歴が表示されました。



    ファイルと履歴はプロジェクトのリポジトリーからも確認することができます。

次回は、Redmineにメールを設定する方法 > をご紹介します。
ITインフラ
ITインフラサービス
サーバー/ネットワーク設計・構築からクラウドシステム導入まで、お客様のビジネスIT環境構築を支援します。