前回のエントリの補足みたいな感じのエントリです。
LTの時はDBのマイグレーションを手動で行っていたものの、作業を忘れそうなこともあり、できれば自動化したいところでした。
その後良い方法がないかを調べてみたところ、谷口さんの記事を見つけました。
Azure Webサイトのデプロイ・ロジックをカスタマイズするには? - Build Insider
その中に「カスタム・デプロイ・ロジック(.deploymentファイル)の作成」がありました。それを読むと、.deploymentファイルを使えばFluentMigratorの自動化ができるかもしれないと考えました。
ただ、上の記事では1つのコマンドを実行していましたが、手元では
- Nancyアプリのデプロイ
- FluentMigratorによるDBのマイグレーション
の2つのコマンド実行が必要そうでした。
そのため、.deployment
ファイルで以下が実現できないかを調べてみました。
- コマンドラインからデプロイをする方法
- 2つのコマンドを実行する方法
コマンドラインからデプロイをする方法
KuduのDeployment hooksに記載がありました。
%MSBUILD_PATH% MyWebApp\MyWebApp.csproj /t:pipelinePreDeployCopyAllFilesToOneFolder /p:_PackageTempDir="%DEPLOYMENT_TARGET%";AutoParameterizationWebConfigConnectionStrings=false;Configuration=Debug;SolutionDir="%DEPLOYMENT_SOURCE%"
そのため、「MyWebApp\MyWebApp.csproj」の部分を手元のアプリ用に修正し、.deploymentファイルに記載してみたところ、デプロイが成功しました。
2つのコマンドを実行する方法
.deploymentファイルに直接書く方法は分かりませんでしたが、command
にcmdファイルなどを指定すれば、その中身が実行されるようでした。
参考:
- WebSites で、Java + gradle + git を使う — Kyrt Blog
- Customizing site deployment based on site's app settings in Azure Websites - Blog.Amit Apple
そのため、リポジトリのルートに.deployment
とdeploy.cmd
の2つのファイルを置き、実行内容はdeploy.cmd
ファイルに書きました。
結果の確認
Deploy to Azureボタンを押してデプロイしたあと、
http://<AppName>.azurewebsites.net/ringo/1
へアクセスすると、
[{"iDCol":1,"contentCol":"つがる"}]
のような感じのJSONが返ってきて、FluentMigratorが自動的に実行されていることが分かりました。
ソースコード
LTの時のサンプルコードにコミットしておきました。
thinkAmi-sandbox/NancyOwinAzure-sample