🤔

App service にASP.NET Core Applicationのデプロイ

2022/11/05に公開

Main Goal

Githubactionを用いてASP.NET Coreのアプリケーションをデプロイする.
初めてgithubactionを0から使うのでちょっと無駄に詰まったことがあるから個人メモ

https://github.com/takacube/NotionCMSBlogService
このリポジトリのアプリをApp serviceにデプロイする.

完成品のpiplelineはこれ

name: Deploy main on push

on:
  push:
    branches:
      - main

env:
  AZURE_WEBAPP_NAME: NotionCMSBlogService 
  AZURE_WEBAPP_PACKAGE_PATH: '.'      
  DOTNET_VERSION: '6.0.x'

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v2

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}
      
      #Run dotnet build and publish: -r linux-x64 
    - name: dotnet build and publish
      run: |
        cd Api
        dotnet restore
        dotnet build --configuration Release
        dotnet publish -c Release -o '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
      # Deploy to Azure Web apps
    - name: 'Run Azure webapp deploy action using publish profile credentials'
      uses: azure/webapps-deploy@v2
      with: 
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.DEV_AZURE_PUBLISH_PROFILE  }}
        package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/Api/myapp'

詰まって点が2つ

  1. ビルドが失敗する.
  2. デプロイはできるものの、エンドポイントにアクセスすると、
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

のエラーが出る.

  1. の解消
    まずビルドが失敗するのは、現在のリポジトリは
    Api
    README.md
    のディレクトリ構造になっていて、このままだと.slnファイルが見つけられずエラーとなる。
    ので、これはとりあえずApiディレクトリに移動してから実行すれば問題ない。
    (workflowを動かす)

  2. の解消
    デプロイ後のapp serviceでは

    app serviceにコンソールからアクセスするとわかるように
    home/site/wwwroot/
    配下にプロジェクトが置かれる。
    ASP.NET Coreのビルド後のアプリケーションにアクセスするにはこのwwwroot/ディレクトリ直下にweb.configファイルが存在する必要がある。
    もともと無駄なビルド前のプロジェクトも一緒にデプロイしていてweb.configがwwwroot/ディレクトリ直下に設置されていなかったのが問題だったっぽい。
    ので

with: 
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.DEV_AZURE_PUBLISH_PROFILE  }}
        package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/Api/myapp'

デプロイするパッケージのpathをちゃんとビルド後のファイルのみにしてデプロイすればうまく動作した.

Discussion