EC2インスタンスのDockerコンテナにあるRedmineとGitHubを連携してみた記録
- GitHubと連携するプラグインをRedmineに追加します。
- GitHubのリポジトリにDeploy keysを登録してパスワードなしでクローンできるようにします。
- GitHub上のソースをクローンします。
- Redmineを設定します。
- リポジトリを自動更新する
- 失敗したこと
- GitHubと連携するプラグインをRedmineから削除する方法
- 環境
GitHubと連携するプラグインをRedmineに追加します。
プラグインを配置します。
# 1. DockerホストにログインしてDockerを動かせるユーザーに切り替えます。 $ sudo su - {Docker用ユーザー} [sudo] ponsuke のパスワード: 最終ログイン: 2019/09/04 (水) 18:53:50 JST日時 pts/0 # 2. Redmineコンテナが起動していることを確認します。 $ cd docker/host/ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e943461bd3ad redmine:4.0.4 "/docker-entrypoint.…" 7 months ago Up 6 days 0.0.0.0:80->3000/tcp redmine_no_container # 3. DockerホストからRedmineコンテナのプラグイン用ディレクトリににプラグインをクローンします。 $ docker exec redmine_no_container git clone https://github.com/koppen/redmine_github_hook.git /path/to/redmine/plugins/redmine_github_hook Cloning into '/path/to/redmine/plugins/redmine_github_hook'... # 4. Redmineコンテナにログインします。 $ docker exec -it redmine_no_container bash # 5. プラグイン用ディレクトリに移動してクローン出来たことを確認します。 $ cd /path/to/redmine/plugins/redmine_github_hook/ $ ls -la | grep github -rw-r--r-- 1 root root 876 Feb 28 08:57 redmine_github_hook.gemspec # 6. Redmineコンテナからログアウトします。 $ exit # 7. Redmineコンテナを再起動します。 $ docker restart redmine_no_container redmine_no_container
GitHubのリポジトリにDeploy keysを登録してパスワードなしでクローンできるようにします。
コンテナで秘密鍵と公開鍵を作成します。
鍵を作成する際にパスフレーズを設定するとリポジトリをクローンだけでなくフェッチするときにも毎回パスフレーズの入力が必要になってしまうため、今回パスフレーズは設定しません。
※. パスフレーズの設定および解除は自己責任で実施してください。
# 1. DockerホストにログインしてDockerを動かせるユーザーに切り替えます。 $ sudo su - {Docker用ユーザー} [sudo] ponsuke のパスワード: 最終ログイン: 2020/02/28 (金) 17:22:13 JST日時 pts/0 # 2. Redmineコンテナにログインします。 $ cd docker/host/ $ docker exec -it redmine_no_container bash # 3. RSA鍵のペアを作成します。 # ssh-keygenコマンドはデフォルトで「ユーザー名@ホスト名」をコメントにします。なのでGitHubのユーザのメールアドレスをコメントとして-Cオプションで指定します。 $ ssh-keygen -t rsa -C ponsuke@mail.com Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <<<< Enter Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): <<<< Enter Enter same passphrase again: <<<< Enter ...省略... # 4. 公開鍵を表示してコピーします。 $ cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAA... #
GitHub上のソースをクローンします。
# 1. リポジトリのクローン先用にディレクトリを作成します。 $ mkdir git $ ls -la | grep git drwxrwxr-x 2 redmine redmine 38 Jun 10 2019 .github -rw-rw-r-- 1 redmine redmine 761 Jun 10 2019 .gitignore drwxr-xr-x 2 root root 6 Mar 5 23:55 git # 2. 作成したディレクトリに移動します。 $ cd git/ # 3. ベアリポジトリをクローンします。 $ git clone --bare git@github.com:ponta/hoge.git Cloning into bare repository 'hoge.git'... Warning: Permanently added the RSA host key for IP address '12.345.67.89' to the list of known hosts. Enter passphrase for key '/root/.ssh/id_rsa': remote: Enumerating objects: 311, done. remote: Counting objects: 100% (311/311), done. remote: Compressing objects: 100% (191/191), done. remote: Total 19981 (delta 110), reused 232 (delta 42), pack-reused 19670 Receiving objects: 100% (19981/19981), 11.54 MiB | 7.12 MiB/s, done. Resolving deltas: 100% (12399/12399), done. $
Redmineを設定します。
- Redmineにログインします。
- 連携するプロジェクトを選択します。
リポジトリを設定します。
Redmine上にクローンしたベアリポジトリを更新します。
# 1. DockerホストにログインしてDockerを動かせるユーザーに切り替えます。 $ sudo su - {Docker用ユーザー} [sudo] ponsuke のパスワード: 最終ログイン: 2019/09/04 (水) 18:53:50 JST日時 pts/0 # 2. Redmineコンテナにログインします。 $ docker exec -it redmine_no_container bash # 3. リポジトリのクローン先に移動します。 $ cd git/hoge.git # 4. ベアリポジトリを更新します。 $ git fetch origin 'refs/heads/*:refs/heads/*'
チケットに関連付くコミットがあるとチケットに表示されます。
リポジトリを自動更新する
方法1つめ : GitHubにWebhookの設定を行います
方法2つめ : cronにリポジトリをfetchするシェルを登録する
- 参考
失敗したこと
認証用の鍵にパスフレーズを設定して毎回入力が必要になってしまった。
GitHubの認証用の鍵を作成した際にパスフレーズを設定しました。
その結果、フェッチのたびにパスフレーズの入力が必要となってしまいました。
そうすると自動でフェッチさせるのに困ります。なのでパスフレーズを解除します。
※. パスフレーズを解除するのは自己責任で実施してください。
対応 : (失敗)パスフレーズを解除できなかった。
コンテナにsudoコマンドがなくてうまくできませんでした。
$ cd /root/.ssh/ # バックアップします $ cp id_rsa id_rsa.org $ ls -la | grep id_rsa -rw------- 1 root root 1876 Mar 5 23:28 id_rsa -rw------- 1 root root 1876 Mar 15 23:39 id_rsa.org -rw-r--r-- 1 root root 408 Mar 5 23:28 id_rsa.pub # パスフレーズを解除しますが、パスフレーズを入力するはずが・・・エラーに・・・ $ openssl rsa -in id_rsa -out id_rsa unable to load Private Key 14068536:error:0909006C:PEM routines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: ANY PRIVATE KEY # パスフレーズをコマンドと合わせて入力してもエラーに・・・ $ openssl rsa -in id_rsa -passin pass:othelve2020 -out id_rsa unable to load Private Key 14068576:error:0909006C:PEM routines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: ANY PRIVATE KEY # コンテナには必要最低限のコマンドしかないためsudoすらなかった・・・(そもそもログインユーザーがrootなので意味ないかも) $ sudo openssl rsa -in id_rsa -out id_rsa bash: sudo: command not found
対応 : 認証鍵を作り直します。
# 認証鍵をパスフレーズなしで再作成します。 $ ssh-keygen -t rsa -C ponsuke@mail.com Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <<<< Enter Enter passphrase (empty for no passphrase): <<<< Enter Enter same passphrase again: <<<< Enter ...省略... # 公開鍵を表示してコピーして再登録します。 $ cat id_rsa.pub ssh-rsa AAAAAAA...省略...
(未解決)We couldn’t deliver this payload: Failure when receiving data from the peer
GitHubと連携するプラグインをRedmineから削除する方法
# 1. DockerホストにログインしてDockerを動かせるユーザーに切り替えます。 [ponsuke@host ~]$ sudo su - {Docker用ユーザー} # 2. Redmineコンテナにログインします。 [{Docker用ユーザー}@host ~]$ docker exec -it redmine_no_container /bin/bash root@redmine_no_container:redmine# ls -l plugins/ #...省略... drwxr-xr-x 8 root root 229 Feb 28 2020 redmine_github_hook # << 削除するプラグイン #...省略... # 3. プラグインをアンインストールします。 root@redmine_no_container:redmine# bundle exec rake redmine:plugins:migrate NAME=redmine_github_hook VERSION=0 RAILS_ENV=production W, [2022-03-21T23:54:03.645901 #6913] WARN -- : Creating scope :system. Overwriting existing method Enumeration.system. # 4. プラグインのディレクトリを削除します。 root@redmine_no_container:redmine# rm -rf plugins/redmine_github_hook # 5. クーロンを削除します。 root@redmine_no_container:redmine# cat /etc/cron.d/git-cron */5 * * * * root redmine/git/git-fetch.sh >> /var/log/cron.log 2>&1 root@redmine_no_container:redmine# rm /etc/cron.d/git-cron # 6. クーロンに登録されていたシェルを削除します。 root@redmine_no_container:redmine# rm git/git-fetch.sh # 7. Redmineに連携していたリポジトリをクローンしたディレクトリを削除します。 root@redmine_no_container:redmine# rm -rf git/ncd-tavi-src-01.git/ # 8. Redmineコンテナからログアウトします。 root@redmine_no_container:redmine# exit exit # 9. コンテナを再起動します。 [{Docker用ユーザー}@host ~]$ docker restart redmine_no_container redmine_no_container