GitHub Actions を使用してワークフローを自動化し、GitHub から Azure App Service にデプロイします。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。
無料でアカウントを作成できます。
- GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。
アプリの作成時に GitHub Actions のデプロイを設定する
GitHub Actions デプロイは、既定の[Web アプリ プロセスの作成] に統合されています。 [デプロイ] タブで [継続的デプロイ] を [有効] に設定し、選択した組織、リポジトリ、ブランチを構成します。
継続的デプロイを有効にすると、 Web アプリの作成プロセスでは 、基本認証の選択に基づいて認証方法が自動的に選択され、それに応じてアプリと GitHub リポジトリが構成されます。
Note
アプリを作成すると、Azure アカウントに特定のアクセス許可がないことを示すエラーが表示されることがあります。 お使いのアカウントに、ユーザー割り当て ID の作成と構成に必要なアクセス許可が必要な場合があります。 別の方法については、次のセクションを参照してください。
Deployment Center から GitHub Actions のデプロイを設定する
既存のアプリの場合は、App Service の Deployment Center を使用して GitHub Actions をすぐに使い始めることができます。 このターンキー メソッドは、アプリケーション スタックに基づいて GitHub Actions ワークフロー ファイルを生成し、GitHub リポジトリにコミットします。
Deployment Center を使用すると、ユーザー割り当て ID を使用して、より安全な OpenID Connect 認証を簡単に構成することもできます。 詳細については、ユーザー割り当て ID オプションに関する記事を参照してください。
必要なアクセス許可がお使いの Azure アカウントに与えられている場合、ユーザー割り当て ID を作成できます。 必要なアクセス許可がない場合、[ID] ドロップダウン メニューで既存のユーザー割り当てマネージド ID を選択できます。
Web サイト共同作成者ロールを利用すると、Azure 管理者と共同でユーザー割り当てマネージド ID を作成できます。
詳しくは、「Azure App Service への継続的デプロイ」をご覧ください。
GitHub Actions ワークフローを手動で設定する
展開センターを使用せずにワークフローを展開できます。 次の 3 つの手順を実行します。
-
デプロイ資格情報を生成します。
-
GitHub シークレットを構成します。
-
ワークフロー ファイルを GitHub リポジトリに追加します。
デプロイ資格情報を生成する
OpenID Connect を使用して、Azure App Service for GitHub Actions で認証することをお勧めします。 この認証方法では、有効期間の短いトークンが使用されます。
GitHub Actions を使用して OpenID Connect を設定する場合、より複雑な作業になりますが、セキュリティが強化されます。
ユーザー割り当てマネージド ID、サービス プリンシパル、または発行プロファイルで認証することもできます。
次の手順では、Azure CLI ステートメントを使用して Microsoft Entra アプリケーション、サービス プリンシパル、およびフェデレーション資格情報を作成する手順について説明します。 Azure portal で Microsoft Entra アプリケーション、サービス プリンシパル、フェデレーション資格情報を作成する方法については、 GitHub と Azure の接続に関するページを参照してください。
既存のアプリケーションがない場合は、リソースにアクセスできる新しい Microsoft Entra アプリケーションとサービス プリンシパルを登録します。 Microsoft Entra アプリケーションを作成します。
az ad app create --display-name myApp
このコマンドは、自分の appId である client-id を含む JSON 出力を返します。 後で AZURE_CLIENT_ID の GitHub シークレットとして使用する値を保存します。
objectId値は、Graph API でフェデレーション資格情報を作成し、APPLICATION-OBJECT-IDとして参照するときに使用します。
サービス プリンシパルを作成する。
$appIDを JSON 出力のappIdに置き換えます。
このコマンドは、次の手順で使用する別の objectId を含む JSON 出力を生成します。 新しい objectId は assignee-object-id です。
appOwnerTenantIdをコピーして、後で AZURE_TENANT_ID の GitHub シークレットとして使用します。
az ad sp create --id $appId
サブスクリプションとオブジェクト別に新しいロールの割り当てを作成します。 既定では、このロールの割り当ては既定のサブスクリプションに紐づけられます。
$subscriptionId をサブスクリプション ID に、$resourceGroupName をリソース グループ名に、$webappName を Web アプリ名に、$assigneeObjectId を生成された id に置き換えます。
Azure CLI を使用して Azure サブスクリプションを管理する方法について説明します。
az role assignment create --role "Website Contributor" --subscription $subscriptionId --assignee-object-id $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
次のコマンドを実行して、Microsoft Entra アプリの 新しいフェデレーション ID 資格情報を作成 します。
APPLICATION-OBJECT-IDを、Active Directory アプリケーションのアプリの作成時に生成したappIdに置き換えます。
後で参照するには、CREDENTIAL-NAME の値を設定します。
subject を設定します。 GitHub では、ワークフローに応じてその値が定義されます。
- GitHub Actions 環境のジョブの場合は、次を使用します。
repo:< Organization/Repository >:environment:< Name >
- 環境に関連付けられていないジョブの場合は、ワークフローのトリガーに使用される ref パスに基づいてブランチ/タグの ref パスを含めます:
repo:< Organization/Repository >:ref:< ref path>。 たとえば、repo:n-username/ node_express:ref:refs/heads/my-branch または repo:n-username/ node_express:ref:refs/tags/my-tag です。
- pull request イベントによってトリガーされるワークフローの場合は、
repo:< Organization/Repository >:pull_requestを使用します。
az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
("credential.json" contains the following content)
{
"name": "<CREDENTIAL-NAME>",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:organization/repository:ref:refs/heads/main",
"description": "Testing",
"audiences": [
"api://AzureADTokenExchange"
]
}
Note
発行プロファイルを使用するには、 基本認証を有効にする必要があります。
発行プロファイルは、アプリレベルの資格情報です。 発行プロファイルを GitHub シークレットとして設定します。
Azure portal で App Service に移動します。
[概要] ページで、[発行プロファイルのダウンロード] を選択します。
ダウンロードしたファイルを保存します。 このファイルの内容を使用して、GitHub シークレットを作成します。
Note
2020 年 10 月の時点で、Linux Web アプリでは、"公開プロファイルをダウンロードする前に"、アプリ設定 WEBSITE_WEBDEPLOY_USE_SCM を true に設定する必要があります。
サービス プリンシパルは、az ad sp create-for-rbac の コマンドを使用して作成できます。 このコマンドは、Azure portal で Azure Cloud Shell を使用するか、[ Open Cloud Shell] を選択して実行します。
az ad sp create-for-rbac --name "myApp" --role "Website Contributor" \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
前述の例で、プレースホルダーを自分のサブスクリプション ID、リソース グループ名、アプリ名に置き換えます。 出力は、App Service アプリへのアクセスを提供するロールの割り当て資格情報を持つ JSON オブジェクトです。 出力は次の JSON スニペットのようになります。 この JSON オブジェクトを後のためにコピーします。
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
重要
最小限のアクセス権を付与することをお勧めします。 前の例の範囲は、リソース グループ全体ではなく、特定の App Service アプリに限定されます。
アプリケーションの クライアント ID、 テナント ID、 サブスクリプション ID を Azure/login アクションに指定する必要があります。 これらの値は、ワークフロー内で直接指定するか、GitHub シークレットに格納してワークフローで参照できます。 GitHub シークレットとして値を保存する方がより安全なオプションです。
GitHub リポジトリを開き、[設定]>[セキュリティ]>[Secrets and variables] (シークレットと変数)>[アクション]>[新しいリポジトリ シークレット] に移動します。
AZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_SUBSCRIPTION_ID のシークレットを作成します。 GitHub シークレットには、Active Directory アプリケーションの次の値を使用します。
| GitHub シークレット |
Active Directory アプリケーション |
AZURE_CLIENT_ID |
アプリケーション (クライアント) ID |
AZURE_TENANT_ID |
ディレクトリ (テナント) ID |
AZURE_SUBSCRIPTION_ID |
サブスクリプション ID |
[ シークレットの追加] を選択して各シークレットを保存します。
GitHub でリポジトリを参照します。
[設定]>[セキュリティ]>[シークレットと変数]>[アクション]>[新しいリポジトリ シークレット] を選択します。
前のセクションで作成したアプリ レベルの資格情報を使用するには、ダウンロードした発行プロファイル ファイルの内容をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_WEBAPP_PUBLISH_PROFILE という名前を付けます。
後で GitHub ワークフロー ファイルを構成する場合は、[AZURE_WEBAPP_PUBLISH_PROFILE] アクションでを使用します。 次に例を示します。
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
GitHub でリポジトリを参照します。
[設定]>[セキュリティ]>[シークレットと変数]>[アクション]>[新しいリポジトリ シークレット] を選択します。
前のセクションで作成したユーザー レベルの資格情報を使用するには、Azure CLI コマンドの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_CREDENTIALS という名前を付けます。
後で GitHub ワークフロー ファイルを構成するときは、credsの入力Azure/loginのシークレットを使用します。 次に例を示します。
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
GitHub リポジトリにワークフロー ファイルを追加する
お使いの GitHub リポジトリの /.github/workflows/ パスの YAML (.yml) ファイルによってワークフローが定義されます。 この定義には、ワークフローを構成するさまざまな手順とパラメーターが含まれます。
少なくとも、ワークフロー ファイルには次の個別の手順があります。
- 作成した GitHub シークレットを使用して App Service で認証します。
- Web アプリを作成します。
- Web アプリをデプロイします。
App Service アプリにコードをデプロイするには、 azure/webapps-deploy@v3 アクションを使用します。 このアクションには、app-nameの Web アプリの名前と、言語スタックに応じて、*.zipに展開する*.war、*.jar、package、またはフォルダーのパスが必要です。
azure/webapps-deploy@v3 アクションの入力可能値の完全一覧については、action.yml を参照してください。
以下の例は、サポートされているさまざまな言語で Web アプリをビルドするワークフローの一部です。
構成したマネージド ID を使用して OpenID Connect を使用してデプロイするには、azure/login@v2、client-id、およびtenant-id キーでsubscription-id アクションを使用します。 前に作成した GitHub シークレットを参照します。
name: .NET Core
on: [push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # 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:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
# 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
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
- name: logout
run: |
az logout
Azure サービス プリンシパルを使用して、ASP.NET model-view-controller (MVC) アプリをビルドして Azure にデプロイします。 この例では、client-id、tenant-id、subscription-id に対して GitHub シークレットを使用します。 これらの値は、サインイン アクションで直接渡すこともできます。
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # 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
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- 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
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'
# Azure logout
- name: logout
run: |
az logout
Azure サービス プリンシパルを使用して、Java Spring Boot アプリをビルドして Azure にデプロイします。 この例では、client-id、tenant-id、subscription-id に対して GitHub シークレットを使用します。 これらの値は、サインイン アクションで直接渡すこともできます。
name: Java CI with Maven
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: complete
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
package: my/target/*.jar
# Azure logout
- name: logout
run: |
az logout
name: Build and deploy WAR app to Azure Web App using OpenID Connect
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: '*.war'
ビルドとデプロイに複数のジョブを使用する 完全な例 を次に示します。
重要
azure/webapps-deploy@v3を使用して TypeScript やその他のコンパイル済み言語を使用して Node.js アプリをデプロイする場合は、まず GitHub Actions でアプリをビルドしてから、コンパイル済みの出力フォルダー (dist/やbuild/など) をデプロイします。 代わりに App Service ビルド自動化を使用する場合は、SCM_DO_BUILD_DURING_DEPLOYMENTアプリ設定をtrue に設定します。
name: JavaScript CI
on: [push]
permissions:
id-token: write
contents: read
name: Node.js
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '24.x' # Set this to the node version to use
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Check out the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Setup Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: 'npm install, build, and test'
run: |
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
# Deploy web app by using Azure credentials
- uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
# Azure logout
- name: logout
run: |
az logout
name: Python application
on:
[push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # 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
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
- name: logout
run: |
az logout
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:
# Check out 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'
認証に NuGet と publish-profile を使用する ASP.NET model-view-controller (MVC) アプリをビルドしてデプロイします。
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # 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
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@main
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- 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 }}/SampleWebApplication/'
Azure 発行プロファイルを使用して、Java Spring Boot アプリをビルドして Azure にデプロイします。
publish-profile 入力で、先ほど作成した AZURE_WEBAPP_PUBLISH_PROFILE シークレットを参照します。
name: Java CI with Maven
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: my-app-path
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: my/target/*.jar
war ではなく jar をデプロイするには、package の値を変更します。
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: my/target/*.war
Azure 発行プロファイルを使用して Tomcat アプリをビルドして Azure にデプロイします。
publish-profile 入力で、先ほど作成した AZURE_WEBAPP_PUBLISH_PROFILE シークレットを参照します。
name: Build and deploy WAR app to Azure Web App using publish profile
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: '*.war'
ビルドとデプロイに複数のジョブを使用する 完全な例 を次に示します。
重要
azure/webapps-deploy@v3を使用して TypeScript やその他のコンパイル済み言語を使用して Node.js アプリをデプロイする場合は、まず GitHub Actions でアプリをビルドしてから、コンパイル済みの出力フォルダー (dist/やbuild/など) をデプロイします。 代わりに App Service ビルド自動化を使用する場合は、SCM_DO_BUILD_DURING_DEPLOYMENTアプリ設定をtrue に設定します。
アプリの発行プロファイルを使用して、Node.js アプリをビルドして Azure にデプロイします。
publish-profile 入力で、先ほど作成した AZURE_WEBAPP_PUBLISH_PROFILE シークレットを参照します。
# File: .github/workflows/workflow.yml
name: JavaScript CI
on: [push]
env:
AZURE_WEBAPP_NAME: my-app-name # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '24.x' # Set this to the node version to use
jobs:
build-and-deploy:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: npm install, build, and test
run: |
# Build and test the project, then
# deploy to Azure Web App.
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
- name: 'Deploy to Azure WebApp'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
アプリの発行プロファイルを使用して、Python アプリをビルドして Azure にデプロイします。
publish-profile 入力で、前に作成した AZURE_WEBAPP_PUBLISH_PROFILE シークレットを参照する方法に注意してください。
name: Python CI
on:
[push]
env:
AZURE_WEBAPP_NAME: my-web-app # 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
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Building web app
uses: azure/appservice-build@v2
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
構成したサービス プリンシパルでデプロイするには、azure/login@v2 キーで creds アクションを使用し、前に参照した AZURE_CREDENTIALS シークレットを参照します。
name: .NET Core
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # 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:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Set up .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 Azure Credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
- name: logout
run: |
az logout
Azure サービス プリンシパルを使用して、ASP.NET model-view-controller (MVC) アプリをビルドして Azure にデプロイします。
creds 入力で、先ほど作成した AZURE_CREDENTIALS シークレットを参照します。
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # 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
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- name: 'Run Azure webapp deploy action using Azure Credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'
# Azure logout
- name: logout
run: |
az logout
Azure サービス プリンシパルを使用して、Java Spring Boot アプリをビルドして Azure にデプロイします。
creds 入力で、先ほど作成した AZURE_CREDENTIALS シークレットを参照します。
name: Java CI with Maven
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: complete
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
package: my/target/*.jar
# Azure logout
- name: logout
run: |
az logout
Azure サービス プリンシパルを使用して Tomcat アプリをビルドして Azure にデプロイします。
creds 入力で、先ほど作成した AZURE_CREDENTIALS シークレットを参照します。
name: Build and deploy WAR app to Azure Web App using Service Principal Connect
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Login to Azure
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: '*.war'
ビルドとデプロイに複数のジョブを使用する 完全な例 を次に示します。
重要
azure/webapps-deploy@v3を使用して TypeScript やその他のコンパイル済み言語を使用して Node.js アプリをデプロイする場合は、まず GitHub Actions でアプリをビルドしてから、コンパイル済みの出力フォルダー (dist/やbuild/など) をデプロイします。 代わりに App Service ビルド自動化を使用する場合は、SCM_DO_BUILD_DURING_DEPLOYMENTアプリ設定をtrue に設定します。
Azure サービス プリンシパルを使用して、Node.js アプリをビルドして Azure にデプロイします。
creds 入力で、先ほど作成した AZURE_CREDENTIALS シークレットを参照します。
name: JavaScript CI
on: [push]
name: Node.js
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '24.x' # Set this to the node version to use
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Check out the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Setup Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: 'npm install, build, and test'
run: |
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
# Deploy web app using Azure credentials
- uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
# Azure logout
- name: logout
run: |
az logout
Azure サービス プリンシパルを使用して、Python アプリをビルドして Azure にデプロイします。
creds 入力で、先ほど作成した AZURE_CREDENTIALS シークレットを参照します。
name: Python application
on:
[push]
env:
AZURE_WEBAPP_NAME: my-app # 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
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
- name: logout
run: |
az logout
よく寄せられる質問
Maven プラグインを使用して WAR ファイルをデプロイするにはどうすればよいですか?
Maven プラグインを使用して Java Tomcat プロジェクトを構成した場合は、このプラグインを使用して Azure App Service にデプロイすることもできます。
Azure CLI GitHub アクションを使用する場合、Azure 資格情報が使用されます。
- name: Azure CLI script file
uses: azure/cli@v2
with:
inlineScript: |
mvn package azure-webapp:deploy
Maven プラグインの使用方法と構成方法の詳細については、 Azure App Service の Maven プラグイン Wiki を参照してください。
Azure CLI を使用して WAR ファイルをデプロイするにはどうすればよいですか?
Azure CLI を使用して App Service にデプロイする場合は、Azure CLI の GitHub アクションを使用できます。
- name: Azure CLI script
uses: azure/cli@v2
with:
inlineScript: |
az webapp deploy --src-path '${{ github.workspace }}/target/yourpackage.war' --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --async true --type war
Azure CLI の GitHub アクションを使用して構成する方法の詳細については、 Azure CLI GitHub アクションを参照してください。
コマンドの使用方法やパラメーターの詳細など、 az webapp deploy コマンドの詳細については、 az webapp deploy ドキュメントを参照してください。
スタートアップ ファイルをデプロイするにはどうすればいいですか?
Azure CLI の GitHub アクションを使用します。 次に例を示します。
- name: Deploy startup script
uses: azure/cli@v2
with:
inlineScript: |
az webapp deploy --src-path ${{ github.workspace }}/src/main/azure/createPasswordlessDataSource.sh --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --type startup --track-status false
コンテナーにデプロイする方法
Azure Web Deploy アクションを使用すると、GitHub Actions を使用してカスタム コンテナーを App Service にデプロイするワークフローを自動化できます。 詳細については、「 コンテナーへのデプロイ」を参照してください。
デプロイメント スロットにデプロイする方法はどのようにすればいいですか?
アクションで slot-name パラメーターを使用して、運用スロットの代わりにデプロイ スロットにazure/webapps-deploy@v3できます。 スロットにデプロイするには、ワークフローのデプロイ ステップに slot-name パラメーターを追加します。
- name: Deploy to Azure Web App
uses: azure/webapps-deploy@v3
with:
app-name: 'my-app-name'
slot-name: 'staging' # Deploy to the 'staging' slot instead of production
package: './output'
Note
OpenID Connect またはサービス プリンシパル認証を使用する場合は、アプリとデプロイ スロットの両方で ID に Web サイト共同作成者 ロールがあることを確認します。 発行プロファイル認証の場合は、Azure portal から特定のスロットの発行プロファイルをダウンロードします (デプロイ>デプロイ スロット> スロット >発行プロファイルをダウンロードします)。
デプロイ後に Tomcat 構成を更新するにはどうすればいいですか?
デプロイ後にいずれかの Web アプリ設定を更新する場合は、 App Service 設定 アクションを使用できます。
- uses: azure/appservice-settings@v1
with:
app-name: 'my-app'
slot-name: 'staging' # Optional and needed only if the settings have to be configured on the specific deployment slot
app-settings-json: '[{ "name": "CATALINA_OPTS", "value": "-Dfoo=bar" }]'
connection-strings-json: '${{ secrets.CONNECTION_STRINGS }}'
general-settings-json: '{"alwaysOn": "false", "webSocketsEnabled": "true"}' #'General configuration settings as Key Value pairs'
id: settings
このアクションの使用方法と構成方法の詳細については、 App Service 設定 リポジトリを参照してください。
関連コンテンツ
Azure GitHub のアクションとワークフローに関する次のリファレンスを確認してください。