めもめも のーと

ハマったこととか、覚えたこととか

RedmineとGitlabを連携してみた件

よくある記事ですが、自分の作業履歴的な感じで書き残します。

環境

Redmineサーバ - redmine3.0.4を使用。 (この記事で作った環境です) l-light-note.hatenablog.com

Gitサーバ - GitLab Omnibusでrpmインストール。バージョンは7.14.3。

手順

redmine_github_hook.git のインストール

redmine_github_hook.gitというプラグインを使うことで、gitにpushしたタイミングでRedmine側でfetchして Redmineに反映してくれるみたいです。
git cloneで持ってきてredmineを再起動するだけです。

@redmineサーバ

$ cd /var/lib/redmine/plugins
$ git clone https://github.com/koppen/redmine_github_hook.git
$ touch /var/lib/redmine/tmp/restart.txt

Redmineのページ左上「管理」>「プラグイン」に「Redmine Github Hook plugin」が追加されたらOKです。

gitlabへDeploy Keyの登録

Redmineがgitlabから更新情報を持ってこれるように、Deploy Keyを登録します。 git cloneやgit fetchがRedmine側からできればいいので、gitlabに開発者と同じように"redmine"アカウントを作って、
SSH Keyを登録するやり方でもいいのかもしません(未検証)。

@redmineサーバ

$ cd /home/redmine
$ ssh-keygen -t rsa

作成されたid_rsa.pubの中身をgitlabのDeloy Keyに登録します。 f:id:l-light-note:20150916191119p:plain

redmineサーバにgitをclone

今回は/var/lib/repo にgitのbareリポジトリを持ってきます。

# mkdir /var/lib/repo && chown -R redmine:redmine /var/lib/repo
# su - redmine
$ cd /var/lib/repo
$ git clone --bare git@mygitlab.com:/root/test-pj.git

(余談)
ここはけっこうハマりました。。git cloneができずに以下色々試しました。

  • redmineサーバからgitサーバにsshで接続ができるか、iptablesを確認。
  • gitユーザのパスワードを聞かれたので、gitサーバ側でgitユーザにpasswdコマンドでパスワードを付与。
redmineの設定画面にてリポジトリパス登録

以下のように、「リポジトリのパス」を登録します。 f:id:l-light-note:20150916171736p:plain

Hookの設定

gitにpushしたタイミングなどでredmineに更新を反映させるために、gitlabのhookを使います。 登録したURLは 以下の通り。

https:// <redmineサーバのドメイン>/github_hook?project_id=<redmineでプロジェクト作成時に登録した識別子> f:id:l-light-note:20150916192156p:plain

これでRedmineの当該プロジェクトの「リポジトリ」タブに遷移すると、連携できていました!

しかし、新しくpushしたブランチがRedmineに反映されないので、ログを確認。

# tail -f /var/lib/redmine/log/production.log

I, [2015-09-16T16:48:10.665327 #16068]  INFO -- :   Current user: anonymous
I, [2015-09-16T16:48:11.943218 #16078]  INFO -- : Started POST "/github_hook?project_id=xxx" for 10.2.200.138 at 2015-09-16 16:48:11 +0900
E, [2015-09-16T16:48:14.618244 #16068] ERROR -- :   GithubHook: Command 'git fetch origin' didn't exit properly. Full output: ["fatal: 'origin' does not appear to be a git repository\n", "fatal: The remote end hung up unexpectedly\n"]

'origin' does not appear to be a git repositoryとか出てました。

結論として、以下のように対応しました。

@redmineサーバ

git cloneしたディレクトリまで移動。
$ cd /var/lib/repo/cgttest-pj.git

gitのリモートを確認 => 表示なし。。
$ git remote -v

configを見てみる。
$ cat config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = true

originがどこか分からない状況みたいだったので、直接以下の通り登録。
$ git remote add origin git@mytgitlab.com:/root/test-pj.git

configを見てみる。
$ cat config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
[remote "origin"]
        url = git@mygitlab.com:/root/test-pj.git
        fetch = +refs/heads/*:refs/remotes/origin/*

gitのリモートを確認 => 表示!
$ git remote -v
origin  git@mygitlab.com:/root/test-pj.git (fetch)
origin  git@mygitlab.com:/root/test-pj.git (push)

これでgitlab上の当該プロジェクトのWeb hooksの画面で、Test Hook ボタンを押してRedmineを確認したら、反映されていました。

半日使ってしまったが、解決してよかったです。(^^)


追記(2015/10/06)

上記は初めてRedmineとGitlabを連携したときのメモでした。
新しいプロジェクトをGitで作ったあとで、Redmineと連携するときのメモも残します。手順は下記。

  1. Gitlab / Redmine でプロジェクトの追加
  2. [Gitlab]Deploy Keysの追加(有効化)
  3. [Gitlab]Web Hooksの追加
  4. [Redmine]bareリポジトリの作成(サーバ上)
  5. [Redmine]リポジトリ項目の設定(Redmine上)

Gitlab / Redmine でプロジェクトの追加

※手順は省略します。

[Gitlab]Deploy Keysの追加(有効化)

Admin Area > Projects > [対象プロジェクトの]Editボタン押下 > Deploy Keys
このページに、既に登録してあるDeployKeyがあるので、「Enable」ボタンを押下します。 f:id:l-light-note:20151006135357p:plain するとこう↓なります。 f:id:l-light-note:20151006135401p:plain

[Gitlab]Web Hooksの追加

Admin Area > Projects > [対象プロジェクトの]Editボタン押下 > Web Hooks
ページ下に「Add Web Hook」というボタンがあるので、project_id にRedmineで登録した対象プロジェクトの「識別子」を足して登録します。
https://[gitlab-domain]/github_hook?project_id=[redmine-sid]

[Redmine]bareリポジトリの作成(サーバ上)

Redmineが動いているサーバにて、bareリポジトリをCloneします。

@redmine サーバ

$ cd /var/lib/repo
$ git clone --bare git@mygitlab.com:/root/another-repo.git

[Redmine]リポジトリ項目の設定(Redmine上)

Redmineにて「設定」>「リポジトリ」タブ > 「新しいリポジトリ」リンクを押下します。

リポジトリでGitを選択、識別子にGitlabに登録したプロジェクト名、URLに先ほど作ったbareリポジトリのパス/var/lib/repo/another-repo.gitを追記して保存(その他の項目は任意)

これで連携できるようになりました。commitコメントにrefsをつけてコミットしたものがRedmineのチケットと紐づいたり、「リポジトリ」ページで更新差分が確認できたりできればOKです。