Azure App Service 発行プロファイルで appsettings.json を除外する

2023/08/31
★★

発行プロファイル

発行プロファイル(.pubxml) を使うと、簡単に、Azure App Service へアプリをディプロイできて便利です。 Visual Studio 2022 からだと、Web プロジェクトを選択し、右クリックメニューから、[発行] を選択すると、ウィザードが起動するので、対象のサービス、対象の Azure サブスクリプション、対象のリソースを選択することで、発行プロファイルを簡単に作成できます。

発行プロファイルの作成

発行プロファイルができてしまえば、[発行] ボタンから、ワンプッシュで、Azure App Service へアプリをディプロイできます。

発行ボタン

CLI からだと、以下のような感じです。

>dotnet publish xxxxxxx.csproj /p:PublishProfile=xxxxxx.pubxml

もちろん、GihHub Actions で、YAML でも良いですが、発行プロファイルでのディプロイの手軽さは抜群です。Azure 上での動作をさくっと確認したい場合は非常に便利です。

特定のファイルを除外したい

GitHub Action で Azure App Service へディプロイする場合は、リポジトリ上のソースコードからビルドするので、.gitignore に除外したいファイルを指定しておけば良いのですが、ウィザードで作成した発行プロファイルで、ローカル環境から発行を行うと、appsettings.json も、もれなくディプロイされてしまいます。

Azure App Service の構成で、環境変数の値を読んでいるのか、appsettings.json から構成情報を読んでいるのか、よくわからなくなってしまいます、、、。もちろん、環境変数が優先されますが、変数名のスペルミスがあっても気付かないこともあります。それ以上に、ローカルの ConnectionString 等の値をサーバーにあげたくないですね、、、。

特定のファイルをディプロイしたくない場合は、発行プロファイル(.pubxml) で、除外したいファイルを明示的に指定してやります。

発行プロファイル (.pubxml) は、Visual Studio 2022 の場合は、プロジェクトルート以下の Properties\PublishProfiles フォルダー以下に格納されています。

対象の発行プロファイル(.pubxml) を以下のように編集します。

<?xml version="1.0" encoding="utf-8"?>
<!--
このファイルは、Web プロジェクトの公開 / パッケージ処理で使用されます。この MSBuild ファイルを編集すると、
この処理の動作をカスタマイズできます。詳細については、https://go.microsoft.com/fwlink/?LinkID=208121 を参照してください。 
-->
<Project>
  <PropertyGroup>
    <WebPublishMethod>ZipDeploy</WebPublishMethod>
    <IsLinux>true</IsLinux>
    <ResourceId>...</ResourceId>
    <ResourceGroup>...</ResourceGroup>
    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
    <SiteUrlToLaunchAfterPublish>...</SiteUrlToLaunchAfterPublish>
    <PublishProvider>AzureWebSite</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <ProjectGuid>...</ProjectGuid>
    <PublishUrl>https://xxx.scm.azurewebsites.net/</PublishUrl>
    <UserName>$xxx</UserName>
    <_SavePWD>true</_SavePWD>
  </PropertyGroup>
  <!-- 不要なファイルの除外 start -->
  <ItemGroup>
    <Content Update="appsettings.json" CopyToPublishDirectory="Never" />
    <Content Update="appsettings.*.json" CopyToPublishDirectory="Never" />
  </ItemGroup>
  <!-- 不要なファイルの除外 end -->
</Project>

<ItemGroup><Content Update= で対象のファイルを指定して、CopyToPublishDirectory="Never" で公開しないように設定します。

以上、参考までに。

参考サイト

コメント (0)

コメントの投稿