この記事では、GitHub、Bitbucket、Azure Repos、またはその他のリポジトリから更新プログラムをプルすることで、Azure App Service への継続的デプロイ (CD) を構成する方法について説明します。
[前提条件]
ソース管理リポジトリ内の Azure App Service アプリに対する書き込み権限。
リポジトリを準備する
App Service ビルド サーバーから自動ビルドを取得するには、リポジトリ ルートにプロジェクトに正しいファイルがあることを確認します。
ランタイム | ルート ディレクトリのファイル |
---|---|
ASP.NET (Windows のみ) |
*.sln 、*.csproj または default.aspx |
ASP.NET Core |
*.sln または *.csproj 。 |
PHP |
index.php 。 |
Ruby (Linux のみ) |
Gemfile 。 |
Node.js |
スタート スクリプトで server.js 、app.js 、または package.json 。 |
Python(プログラミング言語) |
*.py 、requirements.txt または runtime.txt |
HTML |
default.htm 、 default.html 、 default.asp 、 index.htm 、 index.html 、または iisstart.htm 。 |
WebJobs |
継続的 WebJobs の場合は <job_name>/run.<extension> の下、トリガーされた WebJobs の場合は App_Data/jobs/continuous の下にある App_Data/jobs/triggered 。 詳細については、Kudu WebJobs のドキュメントをご覧ください。 |
関数 | Azure Functions の継続的なデプロイに関するページをご覧ください。 |
デプロイをカスタマイズするには、リポジトリ ルートに .deployment
ファイルを含めます。 詳細については、デプロイのカスタマイズに関するページおよび「Custom deployment script (カスタム デプロイ スクリプト)」を参照してください。
ヒント
Visual Studio では、リポジトリを作成できます。 この方法を使用すると、プロジェクトは Git を使用してすぐにデプロイする準備が整います。
継続的デプロイを有効にする
Azure portal で、App Service アプリのページに移動し、左側のナビゲーション メニューから [デプロイ センター] を選択します。
[ソース] の [ 設定] タブで、 ソース管理リポジトリの種類を選択します。
ソースの種類の指示に従ってデプロイを構成します。
一覧表示されているすべてのソースは、App Service Build Service を使用してビルドできます。 一部のソースは、GitHub Actions または Azure Pipelines を使用してビルドすることもできます。 詳細については、「 ビルド プロバイダー」を参照してください。
GitHub Actions は、既定の GitHub ビルド プロバイダーです。 プロバイダーを変更するには、[ プロバイダーの変更] を選択し、[ App Service Build Service ] または [ Azure Pipelines] を選択し、[ OK] を選択します。
必要に応じて、[ 承認 ] を選択し、GitHub の承認プロンプトに従います。 別のユーザーのリポジトリからデプロイするには、[アカウントの 変更] を選択します。
適切な GitHub 組織、 リポジトリ、ブランチを選択 します。
組織またはリポジトリが見つからない場合は、GitHub でさらにアクセス許可を有効にする必要がある場合があります。 詳細については、「Organization のリポジトリに対するアクセスを管理する」を参照してください。
セキュリティを強化するために、[認証の種類] で [ユーザー割り当て ID] を選択します。
Azure アカウントに必要なアクセス許可がある場合、App Service によって ユーザー割り当てマネージド ID が 自動的に作成されるか、既存のマネージド ID を選択できます。 必要なアクセス許可がない場合は、Azure 管理者と協力して 、アプリで必要なロールを持つ ID を作成し、ドロップダウンで選択します。
App Service は、アプリの 言語スタック設定 に基づいてワークフロー テンプレートを選択し、選択した GitHub リポジトリにコミットします。 必要に応じて、[ プレビュー ファイル ] を選択して、変更を保存する前にワークフロー ファイルを表示できます。
[保存] を選択します。
選択したリポジトリおよびブランチでの新しいコミットが App Service アプリに継続的にデプロイされるようになりました。 コミットとデプロイは、 [ログ] タブで追跡できます。
継続的なデプロイの無効化
接続されたソースの継続的デプロイを無効にするには:
Azure portal で、App Service アプリのページに移動し、左側のナビゲーション メニューから [デプロイ センター] を選択します。
[ 設定] タブで、[ 切断] を選択します。
[OK] を選択します。
GitHub の場合、ワークフロー ファイルは既定でリポジトリに残りますが、デプロイ センターの [ログ] タブに統合された進行状況は表示されなくなります。
ビルド プロバイダーとは
ビルド プロバイダーは、ビルド、テスト、デプロイを自動化することで、Azure App Service を使用して継続的インテグレーションと継続的デリバリー (CI/CD) ソリューションを構築するのに役立ちます。 一部のデプロイ ソースには、いくつかのビルド プロバイダー オプションが用意されています。 一覧表示されているすべてのソースは、App Service Build Service を使用してビルドできます。
一覧表示されているビルド プロバイダー オプションに限定されるわけではありませんが、App Service を使用すると、一覧表示されているオプションをすばやく設定し、統合デプロイ ログの取得を開始できます。
GitHub のアクション
GitHub Actions ビルド プロバイダーは、GitHub ソースでのみ使用でき、GitHub デプロイの既定値です。 ビルド プロバイダーは、App Service のビルドタスクとデプロイ タスクを処理する GitHub リポジトリに GitHub Actions ワークフロー ファイルを保存することで CI/CD を設定します。
基本認証の場合、GitHub Actions ビルド プロバイダーは、アプリの発行プロファイルを GitHub シークレットとして追加します。 ワークフロー ファイルは、このシークレットを使用して App Service に対する認証を行います。
ユーザー割り当て ID の場合、App Service は推奨される Microsoft OpenID Connect 認証を有効にし、Azure と GitHub で必要なリソースを構成します。 詳細については、「GitHub Actions のユーザー割り当て ID オプションの機能」を参照してください。
GitHub Actions ビルド プロバイダーは、ワークフロー実行ログから情報をキャプチャし、アプリのデプロイ センターの [ログ] タブに表示します。
GitHub Actions ビルド プロバイダーは、いくつかの方法でカスタマイズできます。
- GitHub リポジトリでワークフロー ファイルが生成された後で、ワークフロー ファイルをカスタマイズします。 詳しくは、「GitHub Actions のワークフロー構文」を参照してください。
azure/webapps-deploy
アクションを使用して、カスタマイズしたワークフローを App Service にデプロイします。 - 選択したブランチが保護されている場合は、構成を保存せずにワークフロー ファイルをプレビューします。 ファイルをカスタマイズし、リポジトリに手動で追加します。 この方法では、Azure portal とのログ統合は行われません。
- 基本認証またはユーザー割り当て ID を使用する代わりに、Microsoft Entra ID サービス プリンシパル を使用してデプロイします。 ポータルでこのメソッドを構成することはできません。
App Service のビルド サービス
App Service ビルド サービスは、ネイティブの App Service デプロイおよびビルド エンジンです。 このオプションを選択すると、App Service によって、承認したリポジトリに Webhook が追加されます。 リポジトリに対するすべてのコード プッシュによって Webhook がトリガーされ、App Service によって変更がプルされ、デプロイ タスクが実行されます。 詳細については、「GitHub (Kudu) からのデプロイ」を参照してください。
App Service ビルド サービスでは、Webhook を機能させるために ソース管理マネージャー (SCM) 基本認証 が必要です。 基本認証は、他の認証方法よりも安全性が低くなります。 詳細については、以下を参照してください。
Azure Pipelines (アジュールパイプライン)
Azure Pipelines は、Azure DevOps のビルド コンポーネントです。 アプリをビルドしてテストし、サポートされている任意のリポジトリから App Service にデプロイするようにパイプラインを構成できます。
ビルド プロバイダーとして Azure Pipelines を使用するには、App Service Deployment Center で Azure Pipelines オプションを選択し、Azure DevOps に直接移動してパイプラインを構成します。 詳細については、「Azure Pipelines を使用して App Service にデプロイする」を参照してください。
よく寄せられる質問
- 基本認証が無効になっている場合、GitHub Actions ビルド プロバイダーはどのように機能しますか?
- デプロイ中にエラーや予期しない動作を引き起こす可能性があるアプリはどうなりますか?
- GitHub Actions でユーザー割り当て ID オプションを使うとどうなりますか?
- "マネージド ID にロールベースのアクセスを割り当て、フェデレーション資格情報を構成するための十分なアクセス許可がありません" というエラーが表示されるのはなぜですか?
- "この ID には、このアプリに対する書き込みアクセス許可がありません。というエラーが表示される理由。 別の ID を選択するか、管理者と一緒に、このアプリであなたの ID に Web サイト共同作成者ロールを付与してください。
基本認証が無効になっている場合、GitHub Actions ビルド プロバイダーはどのように機能しますか?
基本認証が無効になっている場合、GitHub Actions ビルド プロバイダーは基本認証では機能しません。 代わりに、ユーザー割り当て ID オプションで GitHub Actions を使用してみてください。 詳細については、「 基本認証なしでデプロイする」を参照してください。
デプロイ中にエラーや予期しない動作を引き起こす可能性があるアプリはどうなりますか?
公式にサポートされている展開方法は、アプリの実行に使用される /home/site/wwwroot フォルダー内のファイルに変更を加えます。 ファイルがロックされているため、デプロイが失敗する可能性があります。 また、ファイルがすべて同時に更新されない場合は、デプロイ中に予期しない動作が発生する可能性もあります。これは、顧客向けのアプリでは望ましくありません。
これらの問題を回避するには、いくつかの方法があります。
- ZIP パッケージからアプリを 開梱せずに直接実行します。
- デプロイ中に、アプリを停止するか、オフライン モードを有効にします。 詳細については、「Dealing with locked files during deployment」 (デプロイ中にロックされているファイルに対処する) を参照してください。
- 自動スワップを有効にした状態で、ステージング スロットにデプロイします。
GitHub Actions でユーザー割り当て ID オプションを使うとどうなりますか?
GitHub ソースのユーザー割り当て ID を選択すると、App Service は Azure と GitHub で必要なすべてのリソースを構成します。 App Service では、GitHub Actions を使用して推奨される Microsoft OpenID Connect 認証を有効にします。
具体的には、App Service によって次の操作が行われます。
- Azure のユーザー割り当てマネージド ID と、GitHub で選択したリポジトリおよびブランチの間に、フェデレーション資格情報を作成します。
- 選択した GitHub リポジトリのフェデレーション資格情報からシークレット
AZURE_CLIENT_ID
、AZURE_TENANT_ID
、AZURE_SUBSCRIPTION_ID
を作成します。 - ID をアプリに割り当てます。
その後、GitHub リポジトリの GitHub Actions ワークフローの Azure/login
アクションを使用して、OpenID Connect を使用してアプリで認証できます。 例については、「GitHub リポジトリにワークフロー ファイルを追加する」を参照してください。
App Service によって、必要なアクセス許可 が Azure アカウントにある場合、ユーザー割り当てのマネージド アイデンティティが作成され、設定されます。 この ID は、アプリの [ID ] ページには表示されません。 必要なアクセス許可が Azure アカウントにない場合、必要なロールを持つ既存の ID を選択する必要があります。
"マネージド ID にロールベースのアクセスを割り当て、フェデレーション資格情報を構成するための十分なアクセス許可がありません" というエラーが表示されるのはなぜですか?
このメッセージは、GitHub Actions のユーザー割り当てマネージド ID を作成するために必要なアクセス許可が Azure アカウントにないことを示しています。 お使いのアプリに関連する次のアクセス許可が必要です。
Microsoft.Authorization/roleAssignments/write
Microsoft.ManagedIdentity/userAssignedIdentities/write
既定では、Azure ユーザー アクセス管理者 ロールと 所有者 ロールにはこれらのアクセス許可がありますが、 共同作成者 ロールにはアクセスできません。 必要なアクセス許可がない場合は、Azure 管理者と協力して、 Websites 共同作成者 ロールを持つユーザー割り当てマネージド ID を作成してください。 その後、App Service Deployment Center の GitHub ソースの ID ドロップダウン リストでその ID を選択できます。
別の手順の使用の詳細については、「 GitHub Actions を使用して App Service にデプロイする」を参照してください。
"この ID には、このアプリに対する書き込みアクセス許可がありません。というエラーが表示される理由。 別の ID を選択するか、管理者と一緒に、このアプリであなたの ID に Web サイト共同作成者ロールを付与してください。
このメッセージは、選択したユーザー割り当てマネージド ID に、GitHub リポジトリと App Service アプリの間で [OpenID Connect を有効にする]((#what-does-the-user-assigned-identity-option-do-for-github-actions) に必要なロールがないことを示します。 ID には、アプリの 所有者、 共同作成者、または Web サイト共同作成者 ロールが必要です。 ID に最小限必要な特権ロールは、Web サイト共同作成者です。