GitHub Actionsを利用してAzure App Serviceへのデプロイを自動化する

はじめに

ソースコードはGitHubに保存、アプリの公開はApp Serviceを利用している状況で、それぞれを手動で行っています。これをGitHubにソースコードをプッシュしたら自動でApp Serviceに反映されるようになったら手数が減って楽になりますね。
図にすると以下のような感じです。

このような自動化はGitHub Actionsを使うと実現できます。
今回はその設定方法を調べてみました。

手順

設定する方法は2つあります。

  1. Azure App Serviceのポータル上での設定
  2. GitHubのリポジトリでの設定

今回は2番目の方法についての記事となります。
それでは手順を見ていきましょう。

1. Azure App Serviceでの準備

まずは対象のApp Serviceから発行プロファイルをダウンロードしておきます。

発行プロファイルの取得をクリックすると拡張子が「PublishSettings」であるファイルがダウンロードされます。このファイルをメモ帳やVisual Studio Codeなどで開くと、デプロイするための情報が記載されています。この文字列は後ほど利用します。

2. GitHubでの準備

2-1. シークレットの作成

まずはリポジトリにアクセスして「Setting」タブをクリックします。
左側メニューから「Secrets」→「Actions」と選んでいき、「New repository secret」を選択します。

Nameは任意の名前、Valueは先ほどApp Serviceからダウンロードした発行プロファイルの中身を貼り付けてAdd secretを選択します。

これでGitHub Actionsから設定したシークレットの値を取得できるようになります。

2-2. GitHub Actionsの設定ファイルの作成

次にActionsタブをクリックします。 Deploymentの部分にDeploy a .NET Core app to an Azure Web AppConfigureをクリックします。

画面遷移するとApp Serviceへのデプロイ用の設定ファイルのテンプレートが表示されます。
これは編集可能なので、自分の環境や設定に合った内容に修正します。
今回は以下の通り3か所変更しました。

name: Build and deploy ASP.Net Core app to an Azure Web App

env:
  # 変更1
  AZURE_WEBAPP_NAME: [Azure Web Appの名前]    

  AZURE_WEBAPP_PACKAGE_PATH: '.'      
  
  # 変更2 .NET 6を利用する場合
  DOTNET_VERSION: '6.x'

on:
  push:
    branches:
      - "develop"
  workflow_dispatch:

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Set up .NET Core
        uses: actions/setup-dotnet@v2
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }}
      
      - name: Set up dependency caching for faster builds
        uses: actions/cache@v3
        with:
          path: ~/.nuget/packages
          key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
          restore-keys: |
            ${{ runner.os }}-nuget-

      - name: Build with dotnet
        run: dotnet build --configuration Release

      - name: dotnet publish
        run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v3
        with:
          name: .net-app
          path: ${{env.DOTNET_ROOT}}/myapp

  deploy:
    permissions:
      contents: none
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Development'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: .net-app

      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
         
          # 変更3
          publish-profile: ${{ secrets.[2-1で作成したシークレットの名前] }}   
          
         package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

最後に画面右上のStart CommitCommit new fileを押すと設定ファイルのリポジトリへの追加がコミットされます。

以上で設定は完了です。
今回の場合、developブランチにコードをプッシュするたびにApp Serviceに自動でデプロイされます。

執筆担当者プロフィール
古川 貴浩

古川 貴浩(日本ビジネスシステムズ株式会社)

HoloLens 2アプリケーションの開発をしています。

担当記事一覧