RedmineとGitLab連携!QNAP NASにDockerで

Redmine・GitLab連携開発
Alexas_FotosによるPixabayからの画像

今回は、DockerコンテナのGitLabとRedmineをQNAPのNAS上に構築します。GitLabとRedmineは、Gitリポジトリおよびチケットを連携させて運用できるようにし、データは名前付きボリュームに格納します。

スポンサーリンク
スポンサーリンク

はじめに

ソースコードを簡単に管理できる場所が欲しいので、QNAP NAS TS-253BEのContainer Station機能を使って、コンテナでGitLab 13.6.1とRedmine 4.1.1を構築します。GitLabとRedmineは連携設定して、Gitリポジトリの共有とコミット時のチケット履歴を可能にします。今回の手順では、ローカルフォルダ等は使用していないためどの環境にでも構築できます。

コンテナ

YAML

Container Station標準でもGitLab・Redmineのアプリは存在しますが、これを使うと連携設定は出来ません。なので、Container Stationの管理画面上からDocker-Composeを実行して、Dockerコンテナを作成します。そのYAMLが下記です。
ポイントは、以下の通りです。

  • 名前付きボリュームでデータを永続化
  • GitLabのデータをRedmineと共有(参考:External Issue Trackers)
  • GitLabのHOST名gitlabを、ホストマシンから利用時名前解決要
  • 今はHTTPなのでいつかHTTPS化
version: '2.3'

services:

  redis:
    restart: always
    image: redis:5.0.9
    command:
    - --loglevel warning
    volumes:
    - redis-data:/var/lib/redis:Z

  gitlab-postgresql:
    restart: always
    image: sameersbn/postgresql:11-20200524
    volumes:
    - gitlab-postgres-data:/var/lib/postgresql:Z
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm,btree_gist

  gitlab:
    restart: always
    image: sameersbn/gitlab:13.6.1
    depends_on:
    - redis
    - gitlab-postgresql
    ports:
    - "10080:80"
    - "10022:22"
    volumes:
    - gitlab-data:/home/git/data:z
    environment:
    - DB_ADAPTER=postgresql
    - DB_HOST=gitlab-postgresql
    - DB_PORT=5432
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - REDIS_HOST=redis
    - REDIS_PORT=6379
    - TZ=Asia/Tokyo
    - GITLAB_TIMEZONE=Tokyo
    - GITLAB_HTTPS=false
    - SSL_SELF_SIGNED=false
    - GITLAB_HOST=gitlab
    - GITLAB_PORT=10080
    - GITLAB_SSH_PORT=10022
    - GITLAB_RELATIVE_URL_ROOT=
    - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string

  redmine-postgresql:
    restart: always
    image: sameersbn/postgresql:11-20200524
    environment:
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production
    volumes:
    - redmine-postgres-data:/var/lib/postgresql:Z

  redmine:
    restart: always
    image: sameersbn/redmine:4.1.1-8
    depends_on:
    - redmine-postgresql
    - gitlab
    environment:
    - TZ=Asia/Tokyo
    - DB_ADAPTER=postgresql
    - DB_HOST=redmine-postgresql
    - DB_PORT=5432
    - DB_USER=redmine
    - DB_PASS=password
    - DB_NAME=redmine_production
    - REDMINE_PORT=10083
    - REDMINE_HTTPS=false
    ports:
    - "10083:80"
    volumes:
    - redmine-data:/home/redmine/data:Z
    - redmine-data:/var/log/redmine:Z
    volumes_from:
    - gitlab

volumes:
  redis-data:
  redmine-postgres-data:
  gitlab-postgres-data:
  redmine-data:
  gitlab-data:

作成

コンテナを作成する手順は、下記です。

  1. Container Stationを起動し、[作成] > [アプリケーションの作成]をクリックします。
  2. アプリケーション作成画面で、アプリケーション名gitlab(任意)と入力し、上記YAMLを貼り付けて、検証後、[作成]ボタンをクリックします。
  3. 全部で5つのコンテナが起動していれば成功です。
  4. 各アプリケーションのアクセス先は以下の通りです。
    • GitLab
      http://{NASのIPアドレス}:10080/
      初期アカウント:root / {初回ログイン指定時のパスワード}
    • Redmine
      http://{NASのIPアドレス}:10083/
      初期アカウント:admin / admin

プロジェクト作成

GitLabにrootアカウント、Redmineにadminアカウントでログインし、それぞれプロジェクトを新規作成します。GitLabプロジェクト作成時、Readmeを初期設定で追加する方が後の確認が楽です。

ここでは、手順の詳細は割愛します。

リポジトリ連携

GitLabの設定

GitLabにログインし、[Admin Area] > [Projects] > [{連携対象となるプロジェクト名}] をクリックします。画面中央にあるGitaly relative pathを確認します。後で、Redmineにこのリポジトリパスを登録します。

以前は、Legacyフォルダの様なフォルダ形式でしたが、GitLabバージョン13.0以降はデフォルトでHashed Storage形式が採用される様になっています。以前のLegacyフォルダ形式は、バージョン14から廃止予定の模様です。詳しくは、公式ドキュメントRepository storage typesを参照ください。

  • Hashed Storageリポジトリフォルダ形式
    @hashed/#{hash[0..1]}/#{hash[2..3]}/#{hash}.git
  • Legacyリポジトリフォルダ形式
    (namespace)/(projectname).git

Redmineの設定

Redmineにログインし、[プロジェクト] > [{連携対象となるプロジェクト名}] > [設定] > [リポジトリ] > [新しいリポジトリ]をクリックします。以下のパラメーターを設定し、[作成]ボタンをクリックします。

  • バージョン管理システム:Git
  • リポジトリのパス:/home/git/data/repositories/{先ほど確認したリポジトリパス}
    ex. /home/git/data/repositories/@hashed/#{hash[0..1]}/#{hash[2..3]}/#{hash}.git
  • 最新コミットを表示する:チェックする

動作確認

ファイルがコミットされている場合、リポジトリタブもしくは設定のリポジトリ一覧から識別子をクリックすると、ファイルのリポジトリ状態が確認できます。コミットされたファイルが0の場合、404エラーとなります。

チケット連携

Redmineの設定

Redmineにログインし、[管理(プロジェクトではなくホームにある方)] > [設定] > [リポジトリ]をクリックします。下記を設定し、[保存]ボタンをクリックします。ここで生成したAPIキーは、後でGitLabに登録します。

  • Git:チェックする
  • コミットを自動取得する:チェックする
  • リポジトリ管理用のWebサービスを有効にする:チェックする
  • APIキー:[キーの生成]ボタンをクリックする

また、動作確認用に連携対象プロジェクトにチケットを作成しておきます。

GitLabの設定

GitLabにログインし、[Admin Area] > [Settings] > [Network] > [Outbound requests]をクリックします。Allow requests to the local network from web hooks and servicesにチェックして、[Save changes]ボタンをクリックします。

次に、[{連携対象プロジェクト}] > [Settings] > [Webhooks]をクリックします。下記を設定し、[Add webhook]ボタンをクリックします。URLに設定する”Redmine”は、コンテナ内部で名前解決します。登録後、[Test]ボタンクリックでPush eventsを指定し200が返ればOKです。

  • URL:http://redmine/sys/fetch_changesets?key={RedmineのAPIキー}
    ex. http://redmine/sys/fetch_changesets?key=boF0mdvGEhGrjjekNS7r
  • Push events:チェックする
  • Enable SSL verification:チェックしない

動作確認

GitLabからプロジェクトをCloneし、何か編集してコミットします。この際、コミットメッセージに”refs #1″の様にチケット番号を追加してください。その後、リモートリポジトリにPUSHして、Redmineのチケット#1を確認すると、コミットメッセージが紐づけられていることが分かります。

まとめ

GitLabとRedmineを連携させることで、快適なソース管理環境が作成できました。コンテナなので、再構築等メンテが簡単です。また、NAS上に構築することで、ランニングコストの低い24時間稼働サーバーにすることができました。

以上、RedmineとGitLabの連携手順紹介でした。

スポンサーリンク
スポンサーリンク
スポンサーリンク
開発
Tech WalkIt

コメント