Amazon Lightsail の Redmine (Bitnami) を Github と連携させたい
TL; DR
Amazon Lightsail 1 で一発インストールした Redmine と、Github リポジトリを連携させるのに、こちらの記事 2 を参考にしてましたが、少し追加の作業が必要だったので、その備忘録です。
Disclaimer
ちなみに、Ruby系の知識はあまりないので、bundle (bundler) とか gem とかは、実はよく分かっていません…
サーバスペック(as in 2019/06)
今回の環境は、以下のようなかんじ。
- Amazon Lightsail: 1 GB RAM, 1 vCPU, 40 GB SSD
- Apps: Redmine
- Region: Tokyo, Zone A (ap-northeast-1a)
- OS: Ubuntu 16.04.6 LTS
- Apache: 2.4.39
- MySQL: Distrib 5.7.25
- Ruby: 2.5.5p157
- Rails: 5.2.2.1 3
- Git: 2.19.1
- Redmine (Bitnami): 4.0.3.stable
なお、Lightsail で入る Redmine は(他のアプリの場合もだけど) Bitnami 版 4 になります。
1. Github プラグインのインストール
ここは、こちらのページ 2 と同じ。
Lightsail のサーバに SSH ログインして、Github プラグイン(redmine_github_hook) 5 を git clone します。
$ cd /home/bitnami/apps/redmine/htdocs/plugins/
$ git clone https://github.com/koppen/redmine_github_hook.git
2. Redmine 再起動→エラー
昔ながらの tmp/restart.txt ファイルを作成して、サイトにアクセスして再起動…というやり方は古い 6 らしい。
なので、以下のように passenger-config
を使って再起動します。
(ちなみに、このようなやり方 7 でミドルウェアをまるっと再起動もできるらしい。)
$ sudo passenger-config restart-app
Please select the application to restart.
Tip: re-run this command with --help to learn how to automate it.
If the menu doesn't display correctly, press '!'
‣ /opt/bitnami/apps/redmine/htdocs/
Cancel
エンターを押して、再起動。
特にコンソールにはエラーも出ず、その後、 Redmine を開いてみると…
だめじゃん…orz
3. エラーの修正 その1
Apache のエラーログ 8 を見てみると、こんなエラーが出ていました。
[[[ snip ]]]
Message from application: You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
If this is a development machine, remove the /opt/bitnami/apps/redmine/htdocs/Gemfile
freeze by running `bundle install --no-deployment`.
The list of sources changed
The dependencies in your gemfile changed
The gemspecs for path gems changed
You have added to the Gemfile:
* source: source at `/opt/bitnami/apps/redmine/htdocs/plugins/redmine_github_hook`
* redmine_github_hook ruby, ruby_18, ruby_19, ruby_20, ruby_21, ruby_22, ruby_23, ruby_24,
ruby_25, mri, mri_18, mri_19, mri_20, mri_21, mri_22, mri_23, mri_24, mri_25, rbx,
truffleruby
* rake
(Bundler::ProductionError)
[[[ snip ]]]
なんか、いろいろ足りないっぽい。
ひとまず "If this is a development machine" のところに書いてあるように、Redmine の Gemfile のある場所で、 bundle install
を実行します。
$ cd /home/bitnami/apps/redmine/htdocs/plugins/
$ bundle install --no-deployment
[[[ snip ]]]
Fetching gem metadata from https://rubygems.org/.............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
[[[ snip many lines ]]]
Bundle complete! 29 Gemfile dependencies, 60 gems now installed.
Gems in the groups development, test and sqlite were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
つらつらと、gem がインストールされていきます。
もう一度、Redmine にアクセスしてみると…
先ほどと同じ、エラー画面。(だめじゃん!)
4. エラーの修正 その2
再度、Apache のエラーログを見ると、今度は別のエラーが。
[[[ snip ]]]
Message from application: undefined method `skip_before_filter' for
GithubHookController:Class
Did you mean? skip_before_action (NoMethodError)
/opt/bitnami/apps/redmine/htdocs/plugins/redmine_github_hook/app/controllers/
github_hook_controller.rb:4:in `<class:GithubHookController>'
[[[ snip (stack trace) ]]]
んんん?
エラーメッセージで検索してみると、redmine_github_hook の Github ページに issue がありました。 9
開発者の koppen 氏曰く、
By the looks of things it seems that Redmine Github Hook isn't compatible with newer versions of Redmine. I don't think it has been tested on anything newer than the 2.x line, and especially the newer, Rails 5 based versions are likely not going to work.
- https://github.com/koppen/redmine_github_hook/issues/87#issuecomment-332433468
嫌な予感がするぞwww (サーバスペック参照)
ただ、同じコメントで、次のようにも書いてます。
The fix should be fairly simple, at least if the above error is the only problem; replacing skip_before_filter with skip_before_action should make things work, albeit in a non-backwards-compatible manner.
- https://github.com/koppen/redmine_github_hook/issues/87#issuecomment-332433468
・・・ソース直しちゃいますw
$ cd /opt/bitnami/apps/redmine/htdocs/plugins/redmine_github_hook/
$ vi app/controllers/github_hook_controller.rb
エラーの通り、4行目の skip_before_filter
を skip_before_action
として保存。
再度、Redmine にアクセスしてみると…
開いた!(3度目の正直)
また、 管理
> プラグイン
の画面でも、プラグインが認識されています。
5. Lightsail 側にミラー・リポジトリの作成
プラグインのインストールに手間取ったけど、ようやく本題。
Lightsail 側で Github からミラーするリポジトリを作成していきます。
5.1. 鍵ファイルの作成
Lightsail 側で、以下のように Github と接続するための鍵を生成します。
$ cd ~/.ssh/
$ $ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/bitnami/.ssh/id_rsa): id_rsa_github
Enter passphrase (empty for no passphrase): [enter]
Enter same passphrase again: [enter]
Your identification has been saved in id_rsa_github.
Your public key has been saved in id_rsa_github.pub.
The key fingerprint is:
[[[ snip ]]]
The key's randomart image is:
[[[ snip ]]]
$ cat id_rsa_github.pub
ssh-rsa [[[ snip ]]]
これで表示される、 id_rsa_github.pub
の内容(公開鍵)を、Github の側に登録します。
Github にログインして、右上の Settings
> SSH and GPG keys
> New SSH Key
を開いて、
Title
の部分は Redmine 用って分かるようにな名前を適当に入力、Key
の部分に、先ほどの公開鍵の内容をペーストして、 Add SSH Key
で保存します。
5.2. git リポジトリの作成
再び Lightsail の方に移って、Redmine (Passennger) の実行ユーザーの daemon
用に、先ほどの鍵情報をコピー。10
$ cd /usr/sbin
$ sudo mkdir .ssh
$ sudo cp ~/.ssh/id_rsa_github* .ssh/
$ sudo chown daemon .ssh/
$ sudo chown daemon .ssh/id_rsa_github*
また、鍵ファイル名をデフォルトから変えているので、 .ssh/config
も作成。
$ cd /usr/sbin
$ sudo touch .ssh/config
$ sudo chown daemon .ssh/config
$ sudo vi .ssh/config
Host github
HostName github.com
IdentityFile /usr/sbin/.ssh/id_rsa_github
TCPKeepAlive yes
IdentitiesOnly yes
User git
続いて、リポジトリの保存先を作成して、Github からクローンします。(保存する場所は、お好みで)
$ cd /var
$ sudo mkdir github_repos
$ sudo chown daemon github_repos/
$ sudo -u daemon /bin/bash
$ cd /var/github_repos
$ git clone --bare github:<ユーザ名>/<リポジトリ名>.git
6. Redmine のプラグイン設定
Redmine 側にアクセスして、プロジェクトのページから 設定
> リポジトリ
> 新しいリポジトリ
を選択して、(ローカルの) リポジトリのパス
を設定します。
(これまでの手順通りなら、 /var/github_repos/<リポジトリ名>.git
のはず)
保存したら、プロジェクトのページから リポジトリ
を開くと、中身が見られるようになってるかと思います。
(重いリポジトリだと、開くのに時間がかかるかと)
7. Github で Webhook 設定
最後に Github 側に push した際に、Redmine 側のリポジトリも更新されるよう、Webhook の設定をします。
Github にアクセスして、対象のリポジトリのページから、 Settings
> Webhooks
> Add webhook
を選択して、
Payload URL
に、https://<RedmineのURL>/github_hook?project_id=<プロジェクトの識別子>
を入力して Add webhook
で保存します。
そして、試しに push をしてみて、Redmine 側に反映されたら成功です。
8. git コミットと Redmine チケットの連携(これがやりたかった!)
これで、コミットのメッセージに refs #403
とか references #404
とか IssueID #500
と入れると、該当のチケットからもコミット内容が参照できるようになります。11 (※ 2019/07/10修正: チケット番号の前の # を忘れてました)
(このキーワードは、Redmineの 管理
> 設定
> リポジトリ
の箇所でへ確認・変更可能です)
ちなみに、コミットにチケット番号を付け忘れたり、間違えて付けたりした場合は、こちら 12 の方法で修正可能です。
Postscripts
去年の記事 13 とか、今年の記事 14 とかもあったので情報が古いって訳でもなく、すんなりインストールできるかなーと思ってたのだけど、意外に手間取った…
-
これが、のちのち問題をry ↩
-
Bitnami: Packaged Applications for Any Platform - Cloud, Container, Virtual Machine ↩
-
Error: undefined method `skip_before_filter' for GithubHookController:Class · Issue #87 · koppen/redmine_github_hook ↩
-
nologin なユーザ用の鍵ファイルって、ここ(/usr/sbin/.ssh)に置けばよかったのね… ↩
Author And Source
この問題について(Amazon Lightsail の Redmine (Bitnami) を Github と連携させたい), 我々は、より多くの情報をここで見つけました https://qiita.com/keach/items/c2eeae4267ee722d7d52著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .