LoginSignup
3
5

More than 5 years have passed since last update.

RedmineとGitLabのDockerイメージを連携させる(bindfs版)

Posted at

はじめに

RedmineとGitLabのDockerイメージを連携させる方法としては、以下の記事のようにRedmine側にベアリポジトリを作ってWebHookでGitLabと同期するのが一般的だと思います。

ただ、この方法だとリポジトリ毎に個別に設定が必要で、特に初回のベアリポジトリのクローンはWeb UI上からの操作もできません。
そのためリポジトリ数が多かったり、サーバ管理者とGitLab/Redmineの管理者が分かれている場合に運用が面倒です。
そこで何とかGitLabのリポジトリデータを直接Redmineが参照できないか試してみました。

何が問題か

基本的にはGitLabのリポジトリが格納されたディレクトリをRedmineのDockerでボリュームマウントして参照すればいいはずです。
しかしGitLabのリポジトリはOwnerしかアクセスできず、その上GitLabとRedmineではDockerイメージの実行uidが異なるため、そのままでは権限がなく参照できません。

以下の記事では、Redmine/GitLabのDockerfileをそれぞれ改変し、共通のgidでリポジトリデータにアクセスするようにしていますが、筆者の方も書いているとおりDockerイメージを改変することになるのでいまいちです。

Docker でオフィシャルな GitLab イメージと Redmine イメージのコンテナを連携させる

というわけで、これと同じようなことをDockerイメージの改変なしにできればいい、ということになります。

bindfs

そこでbindfsを使います。bindfsはmount --bindと同じようにディレクトリを別のディレクトリにマウントするコマンドですが、その際uid/gidやパーミッションを変更することができます。
つまりGitLabの実行uid(998)が所有しているリポジトリデータをRedmineのuid(1000)がOwnerであるかのようにマウントできるということです。
(uidの値は使用するDockerイメージによって違うかもしれません。適当に読み替えて下さい)

実行方法は以下のような感じです。


$ ls -l -d gitlab/data/git-data
drwx------. 4 998 root 73  8月 17  2016 gitlab/data/git-data
$ sudo bindfs -u 1000 gitlab/data/git-data redmine/data/git-data
$ ls -l -d redmine/data/git-data
drwx------. 4 1000 root 73  8月 17  2016 redmine/data/git-data

uid=998がOwnerだったgit-dataディレクトリがマウント先のredmine/data/git-dataではuid=1000がOwnerになっています。
bindfsの-uオプションは下位ディレクトリ含めて全てのuidを指定された値に書き換えます。そのためgit-data以下のあるリポジトリは全てRedmineからアクセス可能になります。

正しくマウントできることが確認できたら/etc/fstabに書いておきます。
Redmine側は読むだけなのでroでマウントするのがいいでしょう。

/etc/fstab
/path-to-gitlab/data/git-data /path-to-redmine/data/git-data fuse.bindfs ro,force-user=1000 0 0

docker-compose.ymlなど

最後にdocker-composeのボリュームマウント設定などをまとめておきます。
ここでは以下のようなディレクトリ構成を想定します。

- gitlab/
  - docker-compose.yml
  - data/
    - git-data/
- redmine/
  - docker-compose.yml
  - data/
    - git-data/ (gitlab/data/git-dataをbindfsでマウント)

このときdocker-compose.ymlのボリュームマウント(関係するところだけ抜粋)は以下のようになります。

gitlab/docker-compose.yml
        volumes:
            - ./data:/var/opt/gitlab
redmine/docker-compose.yml
        volumes:
            - ./data/git-data/repositories:/git:ro

これでRedmineのイメージからは/git以下にベアリポジトリがあるように見えるので、RedmineのWeb UIから/git/test.gitなどと指定するだけでOKです。

3
5
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
3
5