AzureにRedmineを立ててgithubと連携する方法
なぜやろうと思ったのか
社内で使っていたredmineでタスクの内容とgithubのコード変更を結び付け、トレースできるようにするため。 本番環境でいきなり試すわけにはいかないのでDockerを使ってみたり色々試したのち、AzureのVMでやるとうまくいったので。 「redmineとgithubの連携を試したいけどどんな環境でやればいいの」という人に使えるかもです。
できるようになること
gitのコミットメッセージに「refs #〇〇」という文字列を含めることで、対応した番号のissueからこのcommitの情報や変更内容を参照できるようになる。 commit毎の変更内容が確認できるのでどのIssueでどのような修正をしたかが分かる。 また、リポジトリから対応するissue番号にリンクすることもできる。
前提
- gitはローカルPCにインストール済みであること。 コマンドラインからGitを使う(for Windows)
- 自前のazureのサブスクリプションがあること
- 自前のgithubアカウントがあること
方法
1.AzureにVMを建てる。DNSを設定する。
Azureポータルからリソースの作成ボタンを押し、検索欄で「bitnami redmine」を入力して検索する。
検索結果から「Redmine Certified by Bitnami」を選択して、作成ボタンを押す。
仮想マシン名は適当に設定し、管理者アカウントはパスワードにして、ユーザー名とパスワードを設定する。 ここで設定したパスワードはVMへのログインに使用する。
デプロイが終わったら、作成したVMのメニューを開く。
DNS名の欄の「構成」ボタンから、DNS名の欄のの構成の設定を行う。DNS名ラベルの欄に任意のDNS名を入力して保存する。
2.VMにgithub_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という名前のプラグインが追加されていれば成功。
5.daemonになってssh認証鍵を作成
ssh認証情報が保管されるディレクトリを作成し、所有権をdaemonに渡す。
cd /usr/sbin sudo mkdir .ssh sudo chown daemon .ssh
ユーザーをdaemonに変更する。
sudo -su daemon
daemonでrsaキーを作成する。 キーの名前、パスフレーズを聞かれるが内容は空白のままでよい。
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の自分のアカウントに公開鍵を登録
右上のアカウントアイコンのメニューから「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の情報が表示されていれば成功。
参考
Azure上にRedmineを立てる [AWS(Bitnami)上のRedmineとGitHubを連携させる] (https://qiita.com/ao89exb/items/c67a20e5dbc559297104) ↑AWSを使用しているもののVM内での操作はAzureでも同じ。