GitHub Actions を使用した App Service へのデプロイ

GitHub Actions を使用して、GitHub からワークフローの自動化と Azure App Service へのデプロイを実行します。

前提条件

アプリ作成時の GitHub Actions デプロイを設定する

GitHub Actions デプロイは、既定のアプリ作成ウィザードに統合されています。 必要な作業は、[デプロイ] タブで [継続的デプロイ][有効にする] に設定し、必要な組織、リポジトリ、ブランチを構成することだけになります。

A screenshot showing how to enable GitHub Actions deployment in the App Service create wizard.

継続的デプロイを有効にすると、アプリ作成ウィザードにより、基本認証の選択に基づいて認証方法が自動的に選択され、お使いのアプリと GitHub リポジトリが適宜構成されます。

基本認証の選択 認証方法
Disable ユーザー割り当て ID (OpenID Connect)
有効にする 基本認証

Note

アプリの作成時、お使いの Azure アカウントに特定のアクセス許可がないというエラーが表示された場合、ユーザー割り当て ID の作成と構成に必要なアクセス許可が与えられていない可能性があります。 代替方法については、「デプロイ センターから GitHub Actions デプロイを設定する」を参照してください。

デプロイ センターから GitHub Actions デプロイを設定する

既存のアプリの場合、App Service デプロイ センターを利用することで GitHub Actions の使用を簡単に始めることができます。 面倒な設定の要らないこの方法では、ご利用のアプリケーション スタックに基づいて GitHub Actions ワークフロー ファイルが自動的に生成され、GitHub リポジトリにコミットされます。

デプロイ センターではまた、ユーザー割り当て ID オプションを利用することで、より安全な OpenID Connect 認証を簡単に構成できます。

必要なアクセス許可がお使いの Azure アカウントに与えられている場合、ユーザー割り当て ID の作成を選択できます。 必要なアクセス許可がない場合、[ID] ドロップダウンで既存のユーザー割り当てマネージド ID を選択できます。 Web サイト共同作成者ロールを利用すると、Azure 管理者と共同でユーザー割り当てマネージド ID を作成できます。

詳しくは、「Azure App Service への継続的デプロイ」をご覧ください。

GitHub Actions ワークフローを手動設定する

デプロイ センターを使用せずにワークフローをデプロイすることもできます。

  1. デプロイ資格情報を生成する
  2. GitHub シークレットを構成する
  3. GitHub リポジトリにワークフロー ファイルを追加する

1.デプロイ資格情報を生成する

GitHub Actions 用の Azure App Service で認証するための推奨される方法は、ユーザー定義マネージド ID を使用することであり、そのための最も簡単な方法は、代わりにポータルで直接 GitHub Actions デプロイを構成しユーザー割り当てマネージド ID を選択することです。

Note

ユーザー割り当てマネージド ID を使用する認証は現在プレビュー段階です。

代わりに、サービス プリンシパル、OpenID Connect、または発行プロファイルを使用して認証することもできます。

Note

発行プロファイルでは、基本認証を有効にする必要があります。

発行プロファイルは、アプリレベルの資格情報です。 発行プロファイルを GitHub シークレットとして設定します。

  1. Azure portal で、お使いのアプリ サービスに移動します。

  2. [概要] ページで、 [発行プロファイルの取得] オプションを選択します。

  3. ダウンロードしたファイルを保存します。 このファイルの内容を使用して、GitHub シークレットを作成します。

Note

2020 年 10 月以降、Linux Web アプリでは、発行プロファイルをダウンロードする前に、アプリ設定 WEBSITE_WEBDEPLOY_USE_SCMtrue に設定する必要があります。 この要件は、今後削除される予定です。

2.GitHub シークレットの構成

GitHub でリポジトリを参照します。 [設定] > [セキュリティ] > [シークレットと変数] > [アクション] > [新しいリポジトリ シークレット] の順に選択します。

アプリ レベルの資格情報を使用するには、ダウンロードした発行プロファイルのファイルの内容をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_WEBAPP_PUBLISH_PROFILE という名前を付けます。

GitHub ワークフロー ファイルを後で構成するとき、Azure Web アプリのデプロイ アクションで AZURE_WEBAPP_PUBLISH_PROFILE を使用できます。 次に例を示します。

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

3.GitHub リポジトリにワークフロー ファイルを追加する

ワークフローは、お使いの GitHub リポジトリの /.github/workflows/ パスの YAML (.yml) ファイルによって定義されます。 この定義には、ワークフローを構成するさまざまな手順とパラメーターが含まれます。

少なくとも、ワークフロー ファイルには次の個別の手順が想定されます。

  1. 作成した GitHub シークレットを利用して App Service を認証する
  2. Web アプリを作成します。
  3. Web アプリをデプロイします。

App Service にコードをデプロイするには、azure/webapps-deploy@v3 アクションを使用します。 このアクションでは、Web アプリの名前が app-name に必要となり、また、言語スタックに基づき、デプロイする *.zip、*.war、*.jar、またはフォルダーのパスが package に必要になります。 azure/webapps-deploy@v3 アクションの入力可能値の完全一覧については、action.yml 定義を参照してください。

以下の例は、サポートされているさまざまな言語で Web アプリをビルドするワークフローの一部です。

publish-profile 入力では、前に作成したAZURE_WEBAPP_PUBLISH_PROFILE GitHub シークレットを参照する必要があります。

name: .NET Core CI

on: [push]

env:
  AZURE_WEBAPP_NAME: my-app-name    # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repo
      - uses: actions/checkout@main
      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ 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@v3
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE  }} # Define secret variable in repository settings as per action documentation
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'

次のステップ

以下のように Azure GitHub Actions とワークフロー上の参照を確認します。