ここでは概念的な話のみ。
実際の設定方法等については、各自でググッてください。
あと、これは昔話です。Redmine のバージョンは若干古いです。
最新の Redmine や Git では状況が異なる可能性あり。
「Redmine や Git には余計な手を加えず、Redmine や Git の標準機能だけで連携を実現する方法を導き出したらこうなった」というお話です。
下調べ
もしかしたら最新の Redmine は、こんな面倒なことしなくても、標準機能だけで別サーバの Git リポジトリを直接参照できるかもしれない。
でも、自分が環境構築した当時、調べてみた限りではこんな状態だった。
プラグインでの連携
そのプラグイン自体が最新だか何だかよく判らなかったし、情報が少ないし、よくわかんなかった。
プラグインがメンテされる可能性も未知数。
トリッキーな方法で連携
Redmine のプログラムソース弄ってなんたらとか、ディレクトリをマウントしてどうたらとか。
文字通りトリッキーな方法すぎて、正直メンド臭そうだった。
制約
あと、命題を実現するうえでの制約が以下。
Redmine の制約
標準的なパッケージ(プラグインとか入れない状態)では、 Redmine と同一のサーバ上にある Git リポジトリとしか連携できない。
前述の通り、絶対にできないわけではない。
プラグインの利用とか色々細々と弄れば、異なるサーバ間でも連携できるかも知れない。
あくまで、Git と Redmine 本体が提供している標準的な機能だけで可能な設定では実現できないという話
当方の運用上の制約
Git リポジトリを管理しているサーバは、Redmine とは別のサーバ
Redmine 搭載のサーバと Git リポジトリを管理しているサーバは、それぞれ公開の場所も、管理上のポリシーも異なる。
そのため Redmine サーバを、Git リポジトリとして一緒して運用する(開発者などに公開して操作させる)ことができない。
でも Redmine は、システム開発の基幹。何とかしてこれらを連携させたい。
そこで出た妙案
Git リポジトリには hook(フック)機能がある。
これを使う。具体的には以下。
- Git ベアリポジトリに push されたら
- ssh で Redmine サーバにログイン。
- Redmine サーバ側にある Git ノンベアリポジトリから、Git サーバのベアリポジトリの内容を fetch。
これによって、以下のメリット。
- Git ベアリポジトリの管理は、Redmine と別サーバ。
- でも Redmine サーバ自らの Git ノンベアリポジトリ(クローン)にも、その内容が常時同期される。
- Redmine は、同一サーバ上の、同期された Git ノンベアリポジトリの内容と連携することで、あたかも Git リポジトリの本体と連携しているように見える。
余談
そんなの GitHub とか GitLab 使えば、Redmine とか要らなくね?
その通り。
GitHub, GitLab で世界が完結できている幸せな方々については、Redmine なんか必要ない。
ぜひともこの話はなかったことにしてほしい。
でも世の中 Redmine をポータルにして運用している組織は沢山いるような気がしたので、記事にした次第。