落とし穴に立て札を立てるが如く

ハマりどころの解決が少しでも早くなることを願って書いていきます

AzureにRedmineを立ててgithubと連携する方法

f:id:nam_yu_sql:20191223161652j:plain

なぜやろうと思ったのか

社内で使っていたredmineでタスクの内容とgithubのコード変更を結び付け、トレースできるようにするため。 本番環境でいきなり試すわけにはいかないのでDockerを使ってみたり色々試したのち、AzureのVMでやるとうまくいったので。 「redminegithubの連携を試したいけどどんな環境でやればいいの」という人に使えるかもです。

できるようになること

gitのコミットメッセージに「refs #〇〇」という文字列を含めることで、対応した番号のissueからこのcommitの情報や変更内容を参照できるようになる。 f:id:nam_yu_sql:20190329080947p:plain commit毎の変更内容が確認できるのでどのIssueでどのような修正をしたかが分かる。 f:id:nam_yu_sql:20190329081059p:plain また、リポジトリから対応するissue番号にリンクすることもできる。 f:id:nam_yu_sql:20190329075845p:plain

前提

方法

1.AzureにVMを建てる。DNSを設定する。

Azureポータルからリソースの作成ボタンを押し、検索欄で「bitnami redmine」を入力して検索する。 f:id:nam_yu_sql:20190329075910p:plain

検索結果から「Redmine Certified by Bitnami」を選択して、作成ボタンを押す。 f:id:nam_yu_sql:20190329080009p:plain

仮想マシン名は適当に設定し、管理者アカウントはパスワードにして、ユーザー名とパスワードを設定する。 ここで設定したパスワードはVMへのログインに使用する。

デプロイが終わったら、作成したVMのメニューを開く。

DNS名の欄の「構成」ボタンから、DNS名の欄のの構成の設定を行う。DNS名ラベルの欄に任意のDNS名を入力して保存する。 f:id:nam_yu_sql:20190329080036p:plain f:id:nam_yu_sql:20190329080109p:plain

2.VMgithub_redmine_hookプラグインをインストールする

VMのメニューを開いて「接続」ボタンを押す。右側の画面で「SSH」タブを選び、「VMローカルアカントを使用してログインする」欄の右側のコピーボタンを押してコピーしておく。

Cloud Shell(以下Shell)を開き、コピーしたログイン用コマンドをペーストしてVMにログインする。Shellにペーストする際はCtrl+Shift+Vでペーストすること。

redmineプラグインを保存するディレクトリに移動し、gitからそこにプラグインをダウンロードしてくる。

cd ~/apps/redmine/htdocs/plugins
git clone https://github.com/koppen/redmine_github_hook.git

3.プラグイン内の一部コードを編集する

プラグインのファイルの中の「github_hook_controller.rb」において、4行目の「skip_before_filter」を「skip_before_action」に書き換える。 以下のコマンドを実行したらiキーを押して編集モードにして編集し、編集がおわったらエスケープキーを押してから「:wq」を入力して保存する。

vi ~/apps/redmine/htdocs/plugins/redmine_github_hook/app/controllers/github_hook_controller.rb

4.VM再起動してredmineにログインして確認

VMのメニューに戻り、再起動ボタンを押してVMを再起動させる。

再起動が終わったら、DNS名の欄の横にあるコピーボタンを押してDNS名をコピーし、ブラウザの別のタブのURLにペーストしてアクセスする。

右上のログインボタンを押してログインする。ログインIDは「user」、パスワードはShellでパスワードが保存されているファイルを見て確認する。

cat ~/bitnami_credentials

redmineの右上のAdministrationメニューから、Pluginsに移動する。

Redmine Github Hook pluginという名前のプラグインが追加されていれば成功。 f:id:nam_yu_sql:20190329080135p:plain

5.daemonになってssh認証鍵を作成

ssh認証情報が保管されるディレクトリを作成し、所有権をdaemonに渡す。

cd /usr/sbin
sudo mkdir .ssh
sudo chown daemon .ssh

ユーザーをdaemonに変更する。

sudo -su daemon

daemonrsaキーを作成する。 キーの名前、パスフレーズを聞かれるが内容は空白のままでよい。

cd .ssh
ssh-keygen -t rsa

6.configファイルを作って編集

configファイルを作成する。

touch config
vi config

作成したconfigファイルの中身を編集する。 編集がおわったら:wqを入力して保存する。

Host github github.com
  HostName github.com
  IdentityFile /usr/sbin/.ssh/id_rsa
  User git

7.githubの自分のアカウントに公開鍵を登録

自分のgithubアカウントでgithubにログインする。

右上のアカウントアイコンのメニューから「Settings」に入る。

左のメニューから「SSH and GPG keys」を選ぶ。

「New SSH key」ボタンを押してキー追加画面に入る。

Titleにはわかりやすい名前を、Keyには作成したrsaキーの公開鍵の内容をペーストする。 公開鍵の内容は以下のファイルからコピーする。

cd /usr/sbin/.ssh
cat id_rsa.pub

8.VMからgithubへの接続のテストを行う

daemonの状態で以下のコマンドを実行する。 「hi [自分のgithub上での名前]! ~~~」と出れば成功。

ssh -T git@github.com

9.テスト用リポジトリを作成

github上で何かしらのプライベートなリポジトリを作成する。

10.VMリポジトリをpull

作成したリポジトリのページに行き、「Clone or download」ボタンをクリックする。

出てきたポップアップの「Use SSH」を押し、Clone with SSHがタイトルに出てきたら、そのurlをコピーする。

Shellに戻り、作成したリポジトリを置くための適当なディレクトリを作る。 作ったら、そのディレクトリにリポジトリをクローンしてくる。

git clone --bare [コピーしたurl]

11.redmineでプロジェクトを作ってリポジトリを割り当て

redmineの画面右上「Projects」を開き、その中の右上にある「New project」をクリックする。

わかりやすいプロジェクト名を入力して「Create」を押す。 なお、このときにIdentifierの欄に入力した項目は後で使うのでコピーしておくこと。

12.リポジトリのwebhookを設定

再びgithubリポジトリのページに移動する。タブの「Settings」を開き、左のメニューからWebhooksに移動する。

Webhooks画面の右上「Add Webhook」ボタンを押し、webhookを追加する。Payload URLには以下の内容を入力する。他の項目はそのままでよい。

http://[redmineを立てているVMのDNS名]/github_hook?project_id=[作成したredmineのプロジェクトのIdentifier]

13.issueを一つ作成

redmineのプロジェクト内、Issueタブを開き、右の方にある+ New Issueボタンを押す。

内容は適当に設定し、保存する。

14.ローカルPCにリポジトリをcloneしてくる

githubの作成したリポジトリのページに行き、「clone or download」ボタンを押し、今回はClone with HTTPSで表示されているurlをコピーする。

ローカルPCの適当なディレクトリに、先程コピーしたurlを使ってリポジトリをcloneする。

git clone [コピーしたurl]

15.git initする

cloneしてきたリポジトリがあるディレクトリに移動し、そこでgitを初期化する。

git init

16.何かしらファイル作って「refs #1 fix」というコメントでcommit&pushする

何かしらのファイルを作成し、それをステージングファイルにaddする。

touch file
git add file
git commit
git push

17.確認

redmineのIssueを確認する。先程作ったIssueのページにそのIssueと結びついたcommitの情報が表示されていれば成功。 f:id:nam_yu_sql:20190329080316p:plain

参考

Azure上にRedmineを立てる [AWS(Bitnami)上のRedmineGitHubを連携させる] (https://qiita.com/ao89exb/items/c67a20e5dbc559297104) ↑AWSを使用しているもののVM内での操作はAzureでも同じ。