しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Visual Studio と Azure Websites の発行周り小ネタまとめ

最近は 2 つの Websites へ同時にデプロイしたい欲が高まってきたので、コマンドラインからデプロイする方法を簡単に調べました。MSBuild 使えば出来るようです。

それ以外にも調べている途中に見つけた小ネタを忘れないようにメモしておきます。

ちなみに基本的な pubxml の中身はこんな感じです。発行ダイアログの設定から一部は変更可能です。

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

MSBuild を使うと Visual Studio から行うデプロイとほぼ同じことが出来ます。ただしパスワードだけは Visual Studio が暗号化したものを参照できないため、指定する必要があるようです。

pubxml を直接弄ってパスワードを書く手もあるみたいですが、間違って Git にプッシュするのも怖いですし、妥協する部分なのかもしれません。

コマンドラインからのデプロイについては、ASP.NET 公式サイトのドキュメントで説明されていました。

実際に実行するコマンドは以下のような感じになるかと思います。

msbuild WebApplication.sln /p:DeployOnBuild=true /p:PublishProfiles=hoge /p:Configuration=Release /p:Password=*****

パスワードは Azure Websites なら発行プロファイルや Get-AzureWebsite で取得出来るやつです。

実際に確認はしていないですが、Azure Websites からダウンロード可能な .publishsettings ファイルを直接指定することも出来るみたいです。

.wpp.targets ファイルを用意する必要はありますが、割とサクッとデプロイ出来そうな感じです。

msbuild WebApplication.sln /p:DeployOnBuild=true /p:PublishSettingsFile=hoge.publishsettings /p:Configuration=Release

パスワードの指定が必要なくていい感じがしますが、Web.config の変換周りが動かない気がします。

デプロイ後にサイトを表示しない

Visual Studio で publishsettings ファイルをインポートすると作成される pubxml を開くと、LaunchSiteAfterPublish と言う名前の要素が存在しているはずなので、値を False に変更します。

<PropertyGroup>
  <LaunchSiteAfterPublish>False</LaunchSiteAfterPublish>
</PropertyGroup>

これでデプロイ完了後に毎回ブラウザが立ち上がることが無くなります。

不要なファイルをデプロイしない

対象 の pubxml に ExcludeFilesFromDeployment や ExcludeFoldersFromDeployment という要素を追加すると、ファイルやフォルダ単位でデプロイから除外することが出来るようです。

デフォルトではこの要素は含まれていないので、自分で追加する必要があります。

<PropertyGroup>
  <ExcludeFilesFromDeployment>
    foo.txt;bar.txt;baz.txt
  </ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>
    hogehoge;hauhau
  </ExcludeFoldersFromDeployment>
</PropertyGroup> 

Web Deployment FAQ に情報がまとまっていました。思っていた以上に色々なことが出来るようです。

ちなみに pubxml を直接編集する以外にも .wpp.targets ファイルを作成しておけば、それの内容を自動的に反映してくれるみたいですね。

基本的に Visual Studio からデプロイしていただけのゆとりなので、もうちょっと MSBuild と MSDeploy 周りは勉強しておきたいと思いました。*1

*1:Websites なら Git な気がしないこともないけど