GitHub Actionsを使ってASP.NET CoreのアプリをAzure WebAppsにデプロイする

はじめに

現在、コーディングの様子をリアルタイムで配信・共有できるオンラインエディタ、「Live Share Editor」をASP.NET Core + SignalR + Reactで書き直す作業をしています。アプリケーションはAzure App Service Web Appsにデプロイしているのですが、従来はApp ServiceのGitHub連携デプロイ機能を使っていました。これをGitHub Actionsに置き換えたので、手順を紹介しようと思います。
live-share-editor.azurewebsites.net

発行プロファイルのダウンロード

Azure Portalからアプリの発行プロファイルをダウンロードします。
デプロイするアプリの概要ページを開き、上のメニューから「発行プロファイルの取得」をクリックします。
f:id:sublimer:20200216155526p:plain
クリックすると、<app name>.PublishSettingsというファイルがダウンロードされます。

Secretsの設定

先程ダウンロードしたPublishSettingsファイルをテキストエディタで開きます。
その後、GitHubリポジトリを開き、Settings > Secretsの「Add a new secret」をクリックして新しいsecretを追加します。
今回は、以下のように設定しました。

GitHub Actionsの設定

GitHub Actionsの設定ファイルであるyamlファイルを記述していきます。
今回の設定は以下のようにしました。

  • v* のタグが打たれたときにビルドとデプロイを行う
  • .Net Coreのバージョンは3.1
  • Node.jsのバージョンは10
  • GitHub Actionsの設定はgithub-actionsブランチで行い、このブランチにpushされた場合もビルドとデプロイを行う(デバッグ用)

記述したbuild-and-deploy-to-azure.ymlはこちらです。

name: Build and Deploy to Azure
on:
  push:
    branches:
      - github-actions # for debug
    tags:
      - v*

env:
  AZURE_WEBAPP_NAME: live-share-editor
  AZURE_WEBAPP_PACKAGE_PATH: 'build'
  NODE_VERSION: '10.x'

jobs:
  build-and-deploy:
    name: Build and Deploy
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.100
    - name: Publish with dotnet
      run: dotnet publish -c Release -o ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
    - name: Deploy to Azure WebApp
      uses: azure/webapps-deploy@v1
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

ビルドステータスバッジの設定

README.mdなどにビルドのステータスをバッジとして表示する際にはリポジトリのActions > <workflow name> > Create status badgeからバッジのMarkdownのコードをコピーできます。
これをそのままMarkdownファイルにペーストすればバッジが表示されます。

おわりに

AzureへのデプロイにはAzure Pipelinesが使われることが多いようですが、GitHub Actionsでも問題なくできました。これくらいであればAzure PipelinesでもGitHub Actionsでもどちらでも問題なくできるかと思います。
GitHub Actionsについては、こちらの記事が詳しく書かれているのでおすすめです。
knowledge.sakura.ad.jp