CentOS7.3のRedmineとGitBucketを連携

同じ仮想マシン内なら難しくないらしいと...本当ですか先輩?。

くりーむわーかー : RedmineとGitbucketを連携する

GitBucketとRedmineを連携する | 眠るシーラカンスと水底のプログラマー

 

Redmineで新しいプロジェクト

仮想マシンを起動し、「http://仮想マシンIPアドレス/Redmine」にアクセスし、ログインしたら、「管理」をクリック。

f:id:ts0818:20171007213035j:plain

「設定」をクリック。

f:id:ts0818:20171007213219j:plain

リポジトリ」を選択し、「Git」が有効になってることを確認。

f:id:ts0818:20171007213255j:plain

「プロジェクト」を選択し、「新しいプロジェクト」を選択。

f:id:ts0818:20171007213350j:plain

「名称」、「説明」、「識別子」を入力し、「作成」。

f:id:ts0818:20171007213430j:plain

作成されました。

f:id:ts0818:20171007213522j:plain

リポジトリ」タブをクリックし、「新しいリポジトリ」をクリック。

f:id:ts0818:20171007213550j:plain

バージョン管理システム」で「Git」を選択。「識別子」はプロジェクトの「識別子」と同じにします。「リポジトリのパス」にGitBucketのリポジトリのURLを入力。「パスのエンコーディング」も一応「UTF-8」にし、「作成」。

f:id:ts0818:20171007213907j:plain

作成されました。

f:id:ts0818:20171007214127j:plain

だがしかし、エラー!

f:id:ts0818:20171007220501j:plain

なんでも、redmine側にもGitBucketのリポジトリのcloneを作成せねばならないらしいです。

WebHookを受けて操作するためのミラーリポジトリを作成します。 

ALMinium と GitBucket を連携する。 - YuG1224 blog

このリポジトリのcloneをRedmineサーバーに作成します。

ここでポイントになるのは「--bare」オプションをつけてcloneする点です。

bare(ベア)リポジトリはファイルの実体を持たず、更新情報だけを保持する
リポジトリということだそうで、このモードじゃないとエラーになります。 

RedmineとGit(BitBucket)の連携方法(redmine_github_hook使用) - Symfoware

redmineのインストールディレクトリにリポジトリ用のフォルダを作成し、GitBucketのbareリポジトリをclone。

mkdir -p /var/lib/redmine/repo
cd repo
git clone --bare http://192.168.33.10/gitbucket/git/root/gitBucketTest.git

f:id:ts0818:20171007221019j:plain

「Username」「Password」はGitBucketのログイン時のものを入力。

 

Redmine側で作成していたリポジトリを削除し、新たにリポジトリを作成します。「リポジトリのパス」に「/redmineのインストールディレクトリ/新しく作ったフォルダ/GitBucketのリポジトリ名」と入力し「作成」。(自分の場合は「/var/lib/redmine/repo/gitBucketTest.git」)

f:id:ts0818:20171007222031j:plain

リポジトリが表示されました!

f:id:ts0818:20171007222329j:plain

GitBucketにpushしたら、自動的にRedmineのチケットと連動させるには「redmine_github_hook」というプラグインredmineにインストールする必要があるようです。

プラグインを追加。 

cd /var/lib/redmine/plugins
git clone https://github.com/koppen/redmine_github_hook.git

f:id:ts0818:20171007223124j:plain

httpd再起動でredmineも再起動するみたいです。 

systemctl restart httpd

f:id:ts0818:20171007223442j:plain

プラグインが読み込まれました。

f:id:ts0818:20171007223637j:plain

 

GitBucketにWebHookを設定

GitHub - koppen/redmine_github_hook: Allow your Redmine installation to be notified when changes have been pushed to a Github repository.

RedmineにインストールしたプラグインをGitBucketに反映させます。(GitBucketにpullした時のメッセージで、Redmineのチケットを操作できるよう設定)

「Settings」>「Service Hooks」を選択し、「Add webhook」をクリック。

f:id:ts0818:20171007224027j:plain

「Payload URL」に「http://仮想マシンIPアドレス/redmine/github_hook?project_id=プロジェクトの識別子」を入力。「Test Hook」をクリック。

f:id:ts0818:20171007225030j:plain

「Response 200」となっていればOK。

f:id:ts0818:20171007224906j:plain

「Add webhook」をもう一回クリックすると反映されます。

f:id:ts0818:20171008000329j:plain

 

連携テスト

ローカルのプロジェクトフォルダにREADME.mdファイルを作成し編集し、コミット、プッシュをしてみたいと思います。

プロジェクトフォルダ内で右クリックし、「新規作成(X)」>「テキストドキュメント」を選択。

f:id:ts0818:20171007230303j:plain

「README.txt」を作成。

f:id:ts0818:20171007230319j:plain

編集し、保存。

f:id:ts0818:20171007230457j:plain

 「TortoiseGit」>「追加(A)...」を選択。

f:id:ts0818:20171007235249j:plain

「OK」。

f:id:ts0818:20171007235836j:plain

「コミット」を選択。

f:id:ts0818:20171007235857j:plain

 「OK」を選択。

f:id:ts0818:20171008101401j:plain

「プッシュ(リモートへ反映)...」を選択。

f:id:ts0818:20171008000048j:plain

「リモート(R)」に「master」を入力し「OK」。

f:id:ts0818:20171008000141j:plain

「Username」にGitBucketのログイン時のユーザー名を入力し「Ok」。

f:id:ts0818:20171008000233j:plain

「Password」にGitBucketのログイン時のパスワードを入力し「Ok」。

f:id:ts0818:20171008000313j:plain

「閉じる」を選択。

f:id:ts0818:20171008000509j:plain

GitBucketには反映されたけど、

f:id:ts0818:20171008000727j:plain

Redmineに反映されてないっぽいですね。

f:id:ts0818:20171008000803j:plain

しばし調査ですかね...ハマりそうな予感です。

 

 2017年10月08日  追記

var/lib/redmineにrepoフォルダを作成し、git cloneしたときに、--bareオプションだと、いろいろ不具合が出るみたい?ブランチがある場合は、--mirrorオプションを使うらしい。

RedmineのGitリポジトリ設定は、bareリポジトリしか認識しない。

だから、「git clone --bare」でGitリポジトリをクローンしていた。 すると、ブランチ削除の内容が同期されないみたい。

Redmine.JPのリポジトリ設定の説明ページを読むと、Gitリポジトリ設定の箇所の最後に、mirrorオプションの説明が載っていた。

RedmineのGitリポジトリはmirrorオプションで同期するメモ: プログラマの思索

git cloneのやり直し方法とか全然出てこない...。まぁ、間違ってgit cloneするような人間はいないってことですかね、自分は思いっきり間違えたけど。

GitHub - git cloneで上書きしたい(34008)|teratail

⇧  一旦、フォルダごと削除してgit cloneし直すのが良いようです。

rm -rf /var/lib/redmine/repo

フォルダの権限をapacheにした場合、上手く動かなくなったので何も変更せず作成。

[vagrant@10 redmine]$ sudo mkdir -p /var/lib/redmine/repo
[vagrant@10 redmine]$ cd repo
[vagrant@10 repo]$ git clone --mirror http://192.168.33.10/gitbucket/git/root/gitBucketTest.git
Cloning into bare repository 'gitBucketTest.git'...
/var/lib/redmine/repo/gitBucketTest.git: Permission denied
[vagrant@10 repo]$ sudo git clone --mirror http://192.168.33.10/gitbucket/git/root/gitBucketTest.git
Cloning into bare repository 'gitBucketTest.git'...
Username for 'http://192.168.33.10': root
Password for 'http://root@192.168.33.10':
remote: Counting objects: 67, done
remote: Finding sources: 100% (67/67)
remote: Getting sizes: 100% (41/41)
remote: Total 67 (delta 14), reused 67 (delta 14)
Unpacking objects: 100% (67/67), done.
[vagrant@10 repo]$ sudo systemctl restart httpd
[vagrant@10 repo]$ ls -la
total 4
drwxr-xr-x. 3 root root 31 Oct 8 05:00 .
drwxr-xr-x. 21 apache apache 4096 Oct 8 04:57 ..
drwxr-xr-x. 7 root root 138 Oct 8 05:00 gitBucketTest.git
[vagrant@10 repo]$

f:id:ts0818:20171008140417j:plain

「systemctl restart httpd」でhttpdを再起動し、まずは「http://仮想マシンのIPアドレス/gitbucket/」でgitbucketにアクセス。README.txtを更新してます。

f:id:ts0818:20171008103204j:plain

続いて、「http://仮想マシンのIPアドレス/redmine」にアクセスし、ログイン後、「プロジェクト」>「リポジトリ」 は更新されてるようです。

f:id:ts0818:20171008102555j:plain

「活動」も更新されてるようです。 

f:id:ts0818:20171008102626j:plain

「チケット」にも反映されました。

f:id:ts0818:20171008140959j:plain

う~ん、passengerで動かしてるredmineの実行ユーザーって誰になるんだろう?apacheは駄目でした。

f:id:ts0818:20171008142111j:plain

f:id:ts0818:20171008142152j:plain

RedmineのリポジトリブラウザでGitリポジトリの内容を参照するためには、ローカルのbareリポジトリが必要です。

例えば、"Donebox"という名前のTODO管理アプリのリポジトリをRedmineから参照するとします。クローンURLは git://github.com/ook/donebox.git とします。 Redmineが稼働しているサーバ上で、Redmineを実行しているユーザーからアクセス可能なディレクトリを作成してください。:

$ sudo mkdir -p /var/redmine/git_repositories
$ sudo chown rails:rails /var/redmine/git_repositories
$ cd /var/redmine/git_repositories

上記2行目についての注意: これは新しく作成されたディレクトリのオーナーとグループを rails に変更しています。サーバの設定にあわせてユーザー名・グループ名は変更する必要があります(サーバの設定によっては apache や www-data とすべき場合もあります)。ユーザーはgitコマンドを実行する権限が必要であることにも注意してください。

リポジトリ - Redmine Guide 日本語訳

とりあえずは、 連携できたということで。 

 

2017年10月09日(月)  追記

後日、動かしてみたら、やはりGitBucketに加えられた変更がRedmineに反映されない模様。

どのユーザでRedmineが実行されているかわからなければ、以下のコマンドで確認する。 

$ ps -ef|grep redmine

AWS(EC2)にインストールしたRedmineとGit(Gitolite)を連携する – doop

f:id:ts0818:20171009173648j:plain

Redmineの実行ユーザーはapacheっぽいですね。repoフォルダもapacheにして駄目だったんで、今回なにも変えずrootとかにしたんですが。

Redmineがアクセスできるようrepoフォルダはapacheの権限にしつつ、GitBucket側の設定で追加する必要があるようです。

Redmine用のリポジトリの同期(fetch)はRedmineの実行ユーザで行う必要がある。
しかし、リポジトリの更新を検出できるのはGitoliteの実行ユーザ。
そこで、Gitolite実行ユーザからsudoでRedmine用のリポジトリを同期できるように設定する。

AWS(EC2)にインストールしたRedmineとGit(Gitolite)を連携する – doop

フックスクリプトは、自分の場合、Redmine_github_hookプラグインがやってくれてるのだと思われますが...。

GitBucketの実行ユーザーが分からんです...。

 

とりあえず、何か分かったらまた追記していきます。

 

2017年10月09日(月) 23:10  追記

GitBucketのアップデート - Qiita

⇧  上記サイト様を参考にgitbucketのプロセスを確認

ps aux | grep gitbucket

f:id:ts0818:20171009224706j:plain

ps | grep hoge で grep 自身も grep されるのを防ぐ - Qiita

これ、grepしか動いてないっぽいね...。

ps aux | grep -v grep | grep gitbucket

f:id:ts0818:20171009230610j:plain

 

さらに、fオプションを追加すればプロセスがツリー構造になるので、視認性が向上する。 

psコマンドについて詳しくまとめました 【Linuxコマンド集】

ということで全部確認してみましたが、

ps auxf

ダメでした。そういえば、GitBucketは、Apache Tomcatに配置していて、AJPApache JServ Protocol)でApached Httpdと連携してるから、実行ユーザーはapacheかな?もうちょい調査が必要そうです。

 

2017年10月10日(火)23:40   追記

⇩  下記記事の追記を参考ください。

 

ts0818.hatenablog.com