Azure App Service への継続的デプロイ

Azure App Service により、最新の更新プログラムをプルすることで、GitHubBitbucketAzure Repos のリポジトリからの継続的配置が可能になります。

Note

Azure portal の [開発センター (クラシック)] ページ (デプロイ機能の以前のバージョン) は、2021 年 3 月に非推奨となりました。 この変更はアプリの既存のデプロイ設定には影響せず、ポータルの [デプロイ センター] ページで引き続きアプリのデプロイを管理できます。

リポジトリを準備する

Azure App Service ビルド サーバーから自動ビルドを取得するには、リポジトリのルートに、プロジェクトの適切なファイルがあることを確認してください。

ランタイム ルート ディレクトリのファイル
ASP.NET (Windows のみ) *.sln*.csproj、または default.aspx
ASP.NET Core *.sln または *.csproj
PHP index.php
Ruby (Linux のみ) Gemfile
Node.js server.jsapp.js、またはスタート スクリプトを含む package.json
Python *.pyrequirements.txt、または runtime.txt
HTML default.htmdefault.htmldefault.aspindex.htmindex.html、または iisstart.htm
WebJobs App_Data/jobs/continuous (継続的 WebJobs の場合) または App_Data/jobs/triggered (トリガーされた WebJobs の場合) 配下の <job_name>/run.<extension>。 詳細については、Kudu WebJobs のドキュメントをご覧ください。
関数 Azure Functions の継続的なデプロイに関するページをご覧ください。

デプロイをカスタマイズするには、 .deployment ファイルをリポジトリのルートに含めます。 詳細については、デプロイのカスタマイズに関するページおよび「Custom deployment script (カスタム デプロイ スクリプト)」を参照してください。

Note

Visual Studio を使用する場合は、Visual Studio にリポジトリを自動作成させてください。 すぐに、Git を使用してプロジェクトをデプロイできるようになります。

デプロイ ソースを構成する

  1. Azure portal で、App Service アプリの管理ページに移動します。

  2. 左側のウィンドウで、 [デプロイ センター] を選択します。 次に、 [設定] を選択します。

  3. [ソース] ボックスで、いずれかの CI/CD オプションを選択します。

    デプロイ ソースの選択方法を示すスクリーンショット。

続行するには、ビルド プロバイダーに対応するタブを選択します。

  1. GitHub Actions は、既定のビルド プロバイダーです。 プロバイダーを変更するには、[プロバイダーの変更]>[App Service のビルド サービス] (Kudu) >[OK] を選択します。

    Note

    Azure Pipelines を App Service アプリのビルド プロバイダーとして使用するには、Azure Pipelines から直接 CI/CD を構成します。 App Service では構成しないでください。 Azure Pipelines のオプションは、正しい方向を示すだけです。

  2. 初めて GitHub からデプロイする場合は、 [承認] を選択し、承認のプロンプトに従います。 別のユーザーのリポジトリからデプロイする場合は、 [アカウントの変更] を選択します。

  3. GitHub で Azure アカウントを承認したら、 [組織][リポジトリ][ブランチ] の順に選択して CI/CD を構成します。 組織またはリポジトリが見つからない場合は、GitHub でさらにアクセス許可を有効にしなければならないことがあります。 詳細については、「Organization のリポジトリに対するアクセスを管理する」を参照してください。

  4. GitHub Actions がビルド プロバイダーとして選択されている場合は、 [ランタイム スタック] および [バージョン] ドロップダウン リストで目的のワークフロー ファイルを選択できます。 Azure では、選択された GitHub リポジトリにこのワークフロー ファイルをコミットして、ビルドとデプロイのタスクを処理します。 変更を保存する前にこのファイルを確認するには、 [ファイルのプレビュー] を選択します。

    Note

    App Service では、アプリの "言語スタック設定" を検出し、最も適切なワークフロー テンプレートを選択します。 別のテンプレートを選択すると、適切に実行されないアプリがデプロイされるおそれがあります。 詳細については、「GitHub Actions ビルド プロバイダーのしくみ」を参照してください。

  5. [保存] を選択します。

    選択したリポジトリおよびブランチでの新しいコミットが App Service アプリに継続的にデプロイされるようになりました。 コミットとデプロイは、 [ログ] タブで追跡できます。

継続的なデプロイの無効化

  1. Azure portal で、App Service アプリの管理ページに移動します。

  2. 左側のウィンドウで、 [デプロイ センター] を選択します。 次に、 [設定]>[接続解除] の順に選択します。

    Azure portal の App Service アプリでクラウド フォルダーの同期を接続解除する方法を示すスクリーンショット。

  3. 既定では、GitHub Actions ワークフロー ファイルはリポジトリに保持されますが、引き続きアプリへのデプロイをトリガーします。 ファイルをリポジトリから削除するには、 [ワークフロー ファイルの削除] を選択します。

  4. [OK] を選択します。

使用しているアプリはデプロイ中にどうなりますか?

正式にサポートされているすべてのデプロイ メソッドは、アプリの /home/site/wwwroot フォルダー内のファイルに変更を加えます。 アプリの実行には、それらのファイルが使用されます。 したがって、ファイルがロックされていることにより、デプロイに失敗する可能性があります。 すべてのファイルが同時に更新されるわけではないため、アプリはデプロイ中に予期しない動作をすることもあります。 この動作は、顧客向けのアプリでは好ましくありません。 これらの問題を回避するにはいくつかの方法があります。

GitHub Actions ビルド プロバイダーのしくみ

GitHub Actions ビルド プロバイダーは、GitHub の CI/CD 用のオプションです。 次のアクションを完了すると、CI/CD が設定されます。

  • GitHub Actions ワークフロー ファイルを GitHub リポジトリに保管して、App Service のビルドとデプロイのタスクを処理します。
  • アプリの発行プロファイルを GitHub シークレットとして追加します。 ワークフロー ファイルは、このシークレットを使用して App Service に対する認証を行います。
  • ワークフロー実行ログから情報をキャプチャし、それをアプリのデプロイ センターの [ログ] タブに表示します。

GitHub Actions ビルド プロバイダーは、次の方法でカスタマイズできます。

  • GitHub リポジトリでワークフロー ファイルが生成された後に、そのファイルをカスタマイズします。 詳しくは、「GitHub Actions のワークフロー構文」を参照してください。 ワークフローが azure/webapps-deploy アクションを使用して App Service にデプロイされていることを確認してください。
  • 選択したブランチが保護されている場合でも、構成を保存せずに引き続きワークフロー ファイルのプレビューを表示してから、手動でリポジトリに追加することができます。 この方法では、Azure portal とのログ統合は行われません。
  • 発行プロファイルを使用するのではなく、Azure Active Directory でサービス プリンシパルを使用してデプロイします。

サービス プリンシパルを使って認証する

このオプション構成では、既定の認証が、生成されたワークフロー ファイル内の発行プロファイルに置き換えられます。

  1. Azure CLIaz ad sp create-for-rbac コマンドを使用すると、サービス プリンシパルが作成されます。 次の例で、<subscription-id>、<group-name>、<app-name> を独自の値に置き換えます。

    az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
                                --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
                                --sdk-auth
    

    重要

    セキュリティのために、サービス プリンシパルに最低限必要なアクセス権を付与してください。 前の例の範囲は、リソース グループ全体ではなく、特定の App Service アプリに限定されます。

  2. 最上位レベル {} を含め、次の手順の JSON 出力全体を保存します。

  3. GitHub の自分のリポジトリで、 [設定]>[シークレット]>[Add a new secret]\(新しいシークレットの追加\) を選択します。

  4. Azure CLI コマンドからの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_CREDENTIALS などの名前を付けます。

  5. デプロイ センターによって生成されたワークフロー ファイルで、azure/webapps-deploy ステップを次の例のように修正します (これは Node.js ワークフロー ファイルから変更されています)。

    - name: Sign in to Azure 
    # Use the GitHub secret you added.
    - uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}
    - name: Deploy to Azure Web App
    # Remove publish-profile.
    - uses: azure/webapps-deploy@v2
      with:
        app-name: '<app-name>'
        slot-name: 'production'
        package: .
    - name: Sign out of Azure.
      run: |
        az logout
    

他のリポジトリからデプロイする

Windows アプリの場合、ポータルで直接サポートされていないクラウド Git または Mercurial リポジトリ (GitLab など) からの継続的配置を手動で構成できます。 これを行うには、 [ソース] ドロップダウン リストで [外部 Git] を選択します。 詳細については、手動の手順を使用した継続的デプロイの設定に関するページを参照してください。

その他のリソース