Windows Store Appsのバックエンドとしてお手軽にAPI作れたりできるAzure Mobile Servicesですが、Webでぽちぽちいじったやつは全部Gitで管理されています。なので、Azure Mobile SerivcesへGitでアクセスしてローカルでいじって、とかもできるんですが、今回はWebでいじったやつをVisualStudio Onlineをはじめとする外部のGitリポジトリに自動Pushしてみようと思います。
とりあえずまず、Azure Mobile Servicesのインスタンスを作ります。各自適当につくってください。ここではできている前提で話を進めます。
次に、VisualStudio Onlineなりなんなりの外部Gitリポジトリを用意します。GithubでもBitbucketでもGitが使えればなんでもいいです。各自適当に用意してください。今回はhttps://git.example.com/repo/mobile.git
というリポジトリがあるという前提で話を進めます。
また、このリポジトリはユーザ名user
、パスワードpassw0rd
というアカウントで認証できるものとします。
さっそく設定してみます。まず、Mobile Servicesのインスタンスを開いて、構成
をクリックします。
次に、デプロイの開始 URL
というよくわからん項目のURLをブラウザで開きます。開くとこんなページが出てきます。
Debug Console
をクリックして、CMD
をクリックします。ここからAzure側のファイルシステムを触れます。結構便利。
最初に、Azure側のリポジトリにremoteを設定します。リポジトリがあるディレクトリへ移動します
D:\home>cd site\repository
次に、最初に用意しておいた外部のGitサーバの設定を追加します。今回は外部のGitサーバにexternal
という名前を付けました。特になんでもかまいません。
D:\home\site\repository>git remote add external https://user:passw0rd@git.example.com/repo/mobile.git
あとはgit hooksを設定します。 とりあえずまずは目的のディレクトリへ移動。
D:\home\site\repository>cd .git\hooks
次にファイル名を変更
D:\home\site\repository\.git\hooks>move post-commit.sample post-commit
ファイル名が変更されると、上のリストも更新されます。更新されたら、post-commit
ファイルの左側にある鉛筆アイコンをクリックします。
鉛筆アイコンをクリックすると、ファイルの編集画面になります。
ここではshが使えるのでいい感じに書きます。というのもあれなので、今回ここまで設定した内容で書くとこんな感じでどうでしょうか。
#!/bin/sh branch=$(git branch | grep '*' | cut -d ' ' -f 2) if [ "$branch" = "VfsUpdateBranch" ]; then git checkout master git merge VfsUpdateBranch git push external git checkout VfsUpdateBranch fi
VfsUpdateBranchをpushするのもなんなので、とりあえずいったんmasterをチェックアウトして、VfsUpdateBranchをマージしてから、外部Gitサーバへpushするようなコードです。適当な感じでいいと思います。
ここまで設定すると、Webから編集して保存したタイミングでVfsUpdateBranchに編集結果がコミットされます。そのコミットを受けて、最後に書いたシェルスクリプトが実行されます。その結果、gitコマンドで外部のリポジトリに同期されるということです。めでたしめでたし。
と、いろいろめんどくさかったですが、将来的にVisualStudio Onlineと同期できるようになるとうれしいなー。とか。でもそれだとWebSiteでいいんじゃない?という説もあったりなかったり。