.deploymentファイルを使って、Deploy to Azure Buttonを使用した際に、FluetnMigratorを自動実行する #glnagano #azure_shinano

前回のエントリの補足みたいな感じのエントリです。

 
LTの時はDBのマイグレーションを手動で行っていたものの、作業を忘れそうなこともあり、できれば自動化したいところでした。

その後良い方法がないかを調べてみたところ、谷口さんの記事を見つけました。
Azure Webサイトのデプロイ・ロジックをカスタマイズするには? - Build Insider

 
その中に「カスタム・デプロイ・ロジック(.deploymentファイル)の作成」がありました。それを読むと、.deploymentファイルを使えばFluentMigratorの自動化ができるかもしれないと考えました。

 
ただ、上の記事では1つのコマンドを実行していましたが、手元では

の2つのコマンド実行が必要そうでした。

 
そのため、.deploymentファイルで以下が実現できないかを調べてみました。

 

コマンドラインからデプロイをする方法

KuduのDeployment hooksに記載がありました。

%MSBUILD_PATH% MyWebApp\MyWebApp.csproj /t:pipelinePreDeployCopyAllFilesToOneFolder /p:_PackageTempDir="%DEPLOYMENT_TARGET%";AutoParameterizationWebConfigConnectionStrings=false;Configuration=Debug;SolutionDir="%DEPLOYMENT_SOURCE%"

Deployment hooks · projectkudu/kudu Wiki · GitHub

 
そのため、「MyWebApp\MyWebApp.csproj」の部分を手元のアプリ用に修正し、.deploymentファイルに記載してみたところ、デプロイが成功しました。

 

2つのコマンドを実行する方法

.deploymentファイルに直接書く方法は分かりませんでしたが、commandにcmdファイルなどを指定すれば、その中身が実行されるようでした。

参考:

 
そのため、リポジトリのルートに.deploymentdeploy.cmdの2つのファイルを置き、実行内容はdeploy.cmdファイルに書きました。

 

結果の確認

Deploy to Azureボタンを押してデプロイしたあと、

http://<AppName>.azurewebsites.net/ringo/1

へアクセスすると、

[{"iDCol":1,"contentCol":"つがる"}]

のような感じのJSONが返ってきて、FluentMigratorが自動的に実行されていることが分かりました。

 

ソースコード

LTの時のサンプルコードにコミットしておきました。
thinkAmi-sandbox/NancyOwinAzure-sample