12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Redmine(タスク管理)とGitLab(バージョン管理)を連携させてみた

Last updated at Posted at 2022-03-19

まえがき

弊社の開発環境は以下のようになっています。

  • タスク管理ツールはRedmine
  • バージョン管理はGitLab

但し、GitLabとRedmineが載っているサーバーは物理的に別サーバーとなっており、特に連携などはしておりませんでした。

お仕事で両方とも使いたい場面があったので、せっかくなのでこの度連携させてみました。

概要

各システムの役割は以下の通りです。

システム 機能
Redmine タスク管理
GitLab ソース管理

連携させる機能については以下の通りです。

  • RedmineのリポジトリタブからGitLab上のリポジトリが閲覧可能
  • GitLabにPushされたコミットメッセージに付加されたチケット番号とRedmineのチケットを連動させて、Redmineのチケットから関連するリビジョンの内容が確認可能
  • GitLabにPushされた時、Redmineがリポジトリが更新されたことを検知し、対象のチケットページで関連するリビジョンが更新される

検証環境

実運用では物理サーバーが2台の構成でしたが、今回の記事の為に構築した環境は以下の通りです。

Microsoft Hyper-V Serverにて、GitLab用とRedmine用に仮想マシンを構築し、それぞれが別のサーバーであることを再現しています。
ネットワークダイアグラム

GitLab用サーバー

OS Ubuntu 20.04.3 LTS
IP 192.168.137.61
hostname gitlab
GitLab Version 14.7.3-ee.0

Redmine用サーバー

OS Ubuntu 20.04.3 LTS
IP 192.168.137.62
hostname redmine
Redmine Version 4.2.3

構築手順

GitLabの準備

GitLabのインストール

以下の手順でGitLabのインストールを行います。

redmine用のユーザーを作成

  1. ブラウザにてGitLabサーバーに接続します。
    GitLabログイン画面

  2. Usernameに"root"、Passwordに"hogehoge"と入力し、サインインします。
    GitLabログイン画面_root

  3. 「Menu」→「Admin」を選択します。
    GitLab_ホーム画面_Menu

  4. 「New User」を選択します。
    GitLab_Admin画面_NewUser

  5. Name、UserNameに"redmine"、Emailに適当なアドレスを入力し、Regularユーザーを作成します。
    GitLab_NewUser画面_redmine

  6. 「Edit」を選択します。
    GitLab_ユーザー画面_Edit

  7. Passwordに"hogehoge"と入力し、ユーザーを更新します。
    GitLab_ユーザー編集画面_password

  8. 右上メニューから「Sign out」を選択します。
    GitLab_Signout

  9. Usernameに"redmine"、Passwordに"hogehoge"と入力し、サインインします。
    GitLab画面

  10. Current passwordに"hogehoge"、New passwordとPassword confirmationに"redminepassword"と入力し、Set new passwordを押します。
    GitLab_Setupnewpassword画面

GitLabにプロジェクトを作成

  1. Usernameに"root"、Passwordに"hogehoge"と入力し、サインインします。
    GitLabログイン画面_root

  2. 「Menu」→「Projects」→「Create new project」を選択します。
    GitLab_Menu_CreateNewProject

  3. 「Create blank project」を選択します。
    GitLab_CreateNewProject画面_CreateBlankProject

  4. Project nameに"Test-Project"と入力し、プロジェクトを作成します。
    GitLab_CreateBlankProject画面_ProjectName

  5. 「Project information」→「Members」を選択します。
    GitLab_Project画面_Members

  6. 「Invite members」を選択します。
    GitLab_ProjectMembers画面

  7. GitLab member or Email addressに"redmine"と入力し、Select a roleに「Reporter」を選択し、redmineユーザーをプロジェクトメンバーに追加します。
    GitLab_ProjectMembers画面_Invite

  8. 「Menu」→「Admin」を選択します。
    GitLab_ホーム画面_Menu

  9. 「Project」を選択します。
    GitLab_Admin画面_Menu_Project

  10. 「Administrator/Test-Project」を選択します。
    GitLab_Admin画面_Project

  11. 「Gitaly relative path」の項目を確認し、控えておきます。
    GitLab_Admin画面_Project_Path

Redmineの準備

Redmineのインストール

以下の手順でRedmineのインストールを行います。

Redmineにプロジェクトを作成

  1. ブラウザにてRedmineサーバーに接続します。
    Redmine画面

  2. 右上にある「ログイン」を押し、ログインIDに"admin"、パスワードに"redmineadmin"と入力し、ログインします。
    Redmine_ログイン画面

  3. 左上にある「プロジェクト」を押します。
    Redmine_ホーム画面

  4. 「新しいプロジェクト」を押します。
    Redmine_プロジェクト画面

  5. 名称に"Test-Project"と入力し、プロジェクトを作成します。
    Redmine_新しいプロジェクト画面

リポジトリの連動準備

GitLabのプロジェクト内のリポジトリとRedmineのプロジェクトページ内のリポジトリと連携します。

GitLabサーバー→Redmineサーバーの公開鍵認証を設定

GitLabサーバーからRedmineサーバーにパスワード無しで接続できるよう、公開鍵認証を設定します。

公開鍵認証の設定

  1. Redmineサーバーにredmineユーザーとして接続します。

  2. 以下コマンドを実行し、公開鍵認証の許可設定を有効に変更します。

    redmine
    $ sudo vi /etc/ssh/sshd_config
    
    sshd_config
    # 以下のコメントアウトを外す
    PubkeyAuthentication yes
    
  3. 以下コマンドを実行し、sshdを再起動します。

    redmine
    $ sudo systemctl restart sshd
    
  4. GitLabサーバーにgitlabユーザーとして接続します。

  5. 以下コマンドを実行し、公開鍵を生成します。

    gitlab
    $ sudo -u git ssh-keygen
    

    パスフレーズの入力を求められるが、何も入力せずにEnterを押す。
    GitLab_ssh-keygen

  6. 以下コマンドを実行し、redmineサーバーに公開鍵をコピーします。

    gitlab
    $ sudo -u git ssh-copy-id redmine@192.168.137.62
    

    "yes"と入力しEnter後、redmineユーザーのパスワードが求められるので、"redminepass"と入力し、Enterを押す。
    GitLab_ssh-copy-id

公開鍵認証の確認

  1. GitLabサーバーにgitlabユーザーとして接続します。

  2. 以下コマンドを実行し、パスワード無しに接続ができることを確認します。

    gitlab
    $ sudo -u git ssh redmine@192.168.137.62
    

    GitLab_ssh

  3. 以下コマンドを実行し、sshを終了します。

    gitlab
    $ exit
    

Redmineサーバー内にbareリポジトリを配置

  1. Redmineサーバーにredmineユーザーとして接続します。

  2. 以下コマンドを実行し、GitLab上のTest-Projectのbareリポジトリをcloneします。

    redmine
    $ git clone --bare http://192.168.137.61/root/test-project.git /home/redmine/test-project.git
    

    Usernameに"redmine"、Passwordに"redminepassword"を入力する。
    Redmine_git

  3. ブラウザにてRedmineサーバーに接続します。
    Redmine画面

  4. 右上にある「ログイン」を押し、ログインIDに"admin"、パスワードに"redmineadmin"と入力し、ログインします。
    Redmine_ログイン画面

  5. 左上にある「プロジェクト」を押します。
    Redmine_ホーム画面

  6. 「Test-Project」を選択します。
    Redmine_プロジェクト画面

  7. 「設定」タブを選択します。
    Redmine_Test-Project_概要

  8. 「リポジトリ」タブを選択します。
    Redmine_Test-Project_設定

  9. 「新しいリポジトリ」を選択します。
    Redmine_Test-Project_設定_リポジトリ

  10. 以下の通りに入力し、「作成」を押します。
    識別子:test-project
    リポジトリのパス:/home/redmine/test-project.git
    Redmine_Test-Project_設定_新しいリポジトリ

  11. 「リポジトリ」タブを選択します。
    Redmine_Test-Project_設定_リポジトリ

  12. 以下の通り、GitLab上のデータが表示されていることを確認します。
    Redmine_Test-Project_リポジトリ

GitLabサーバーのプロジェクトにhookを設定

hookの設定

  1. GitLabサーバーにgitlabユーザーとして接続します。

  2. 以下コマンドを実行し、gitユーザーとしてBashを起動します。

    gitlab
    $ sudo -u git bash
    
  3. 以下コマンドを実行し、repositoriesディレクトリに移動します。

    gitlab
    $ cd /var/opt/gitlab/git-data/repositories
    
  4. 以下コマンドを実行し、Test-Projectプロジェクトのディレクトリに移動します。
    GitLabにプロジェクトを作成で控えたパスがTest-Projectプロジェクトのディレクトリです。

    gitlab
    $ cd <GitLabにプロジェクトを作成で確認したパス>
    #例:$ cd @hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git
    
  5. 以下コマンドを実行し、custom_hooksディレクトリを作成します。

    gitlab
    $ mkdir custom_hooks
    
  6. 以下コマンドを実行し、post-receiveファイルを作成します。

    gitlab
    $ vi custom_hooks/post-receive
      #!/bin/sh
      git push ssh://redmine@192.168.137.62/home/redmine/test-project.git refs/heads/*:refs/heads/*
    
  7. 以下コマンドを実行し、post-receiveファイルの実行権限を付与します。

    gitlab
    $ chmod u+x custom_hooks/post-receive
    

hookの確認

  1. ブラウザにてRedmineサーバーに接続します。
    Redmine画面

  2. 右上にある「ログイン」を押し、ログインIDに"admin"、パスワードに"redmineadmin"と入力し、ログインします。
    Redmine_ログイン画面

  3. 左上にある「プロジェクト」を押します。
    Redmine_ホーム画面

  4. 「Test-Project」を選択します。
    Redmine_プロジェクト画面

  5. 「リポジトリ」タブを選択します。
    Redmine_Test-Project画面_概要

  6. 以下の画面を開いておきます。
    Redmine_Test-Project画面_リポジトリ

  7. ローカル環境でGitBashなどを使用し、GitLabのリポジトリからcloneします。

    GitBash
    $ git clone http://192.168.137.61/root/test-project.git && cd test-project
    

    GitBash_clone

  8. 適当なファイル(Test-1.txt)を作成し、GitLabのリポジトリへpushします。

    GitBash
    $ git add .
    $ git commit -m 'Test-1'
    $ git push
    

    GitBash_push

  9. 開いておいたRedmineのリポジトリのブラウザを更新すると、データが反映されていることを確認します。
    Redmine_Test-Project画面_リポジトリ

チケットのリアルタイム更新設定準備

Redmineの管理画面にてAPIキーを取得

  1. ブラウザにてRedmineサーバーに接続します。
    Redmine画面

  2. 右上にある「ログイン」を押し、ログインIDに"admin"、パスワードに"redmineadmin"と入力し、ログインします。
    Redmine_ログイン画面

  3. 左上にある「管理」を押します。
    Redmine_ホーム画面

  4. 「設定」を押します。
    Redmine_管理画面

  5. 「リポジトリ」のタブを選択します。
    Redmine_設定画面

  6. 「リポジトリ管理用のWebサービスを有効にする」にチェックを入れ、「キーの生成」を押し、保存します。
    APIキーは後程使うので、控えておいてください
    Redmine_設定画面_リポジトリ

Redmineの対象プロジェクトのプロジェクトidを確認

  1. ブラウザにてRedmineサーバーに接続します。
    Redmine画面

  2. 右上にある「ログイン」を押し、ログインIDに"admin"、パスワードに"redmineadmin"と入力し、ログインします。
    Redmine_ログイン画面

  3. 以下のURLに直接移動し、プロジェクトIDを確認します。
    "id"要素の値がプロジェクトIDです。
    http://192.168.137.62/projects.xml
    Redmine_project.xml

GitLabのプロジェクト設定にてWebHookを設定

  1. ブラウザにてGitLabサーバーに接続します。
    GitLabログイン画面

  2. Usernameに"root"、Passwordに"hogehoge"と入力し、サインインします。
    GitLabログイン画面_root

  3. 「Menu」→「Admin」を選択します。
    GitLab_ホーム画面_Menu

  4. 「Settings」→「Network」を選択します。
    GitLab_Admin画面_Menu_Network

  5. 検索欄に"Outbound requests"と入力し、「Allow requests to the local network from web hooks and services」にチェックし、「Save changes」を押します。
    GitLab_Network画面_OutboundRequests

  6. 「Menu」→「Projects」→「Test-Project」を選択します。
    GitLab_Menu_Test-Project

  7. 「Settings」→「Webhooks」を選択します。
    GitLab_Menu_Webhooks

  8. 「URL」に以下を入力し、「Enable SSL verification」のチェックを外し、「Add webhook」を押します。
    APIキーはRedmineの管理画面にてAPIキーを取得で確認した値を設定し、
    プロジェクトidはRedmineの対象プロジェクトのプロジェクトidを確認で確認した値を設定します。
    http://192.168.137.62/sys/fetch_changesets?key=<APIキー>&id=<プロジェクトid>
    GitLab_Webhooks追加画面
    GitLab_Webhooks追加画面

動作確認

RedmineよりGitLabのリポジトリを確認

以下の通り、確認が可能です。
Redmine_Test-Project_リポジトリ

コミットメッセージにRedmineのチケット番号を付加した際の動作を確認

  1. チケットを作成します。
    Redmine_チケット作成

  2. hookの確認でcloneした作業ディレクトリに適当なファイル(Test-2.txt)を作成し、GitLabのリポジトリへpushします。
    コミットメッセージは以下の通りに設定します。
    refs #1 Test-2

    GitBash
    $ git add .
    $ git commit -m 'refs #1 Test-2'
    $ git push
    

    GitBash_push

  3. ブラウザを更新し、チケット画面の「関係しているリビジョン」から確認できます。
    Redmine_チケット確認

以上で全工程が完了です。
お疲れさまでした。

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?