GitHub Actions を使用して、GitHub からワークフローの自動化と Azure App Service へのデプロイを実行します。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。
無料でアカウントを作成できます。
- GitHub アカウント。 お持ちでない場合は、無料でサインアップしてください。
アプリ作成時の GitHub Actions デプロイを設定する
GitHub Actions デプロイは、既定の[Web アプリ プロセスの作成] に統合されています。 [デプロイ] タブで [継続的デプロイ] を [有効にする] に設定し、必要な組織、リポジトリ、ブランチを構成します。
継続的デプロイを有効にすると、アプリの作成により、基本認証の選択に基づいて認証方法が自動的に選択され、お使いのアプリと GitHub リポジトリが適宜構成されます。
デプロイ センターから GitHub Actions デプロイを設定する
既存のアプリの場合、App Service デプロイ センターを利用することで GitHub Actions の使用を簡単に始めることができます。 面倒な設定の要らないこの方法では、ご利用のアプリケーション スタックに基づいて GitHub Actions ワークフロー ファイルが生成され、GitHub リポジトリにコミットされます。
また、デプロイ センターでは、ユーザー割り当て ID を利用することで、より安全な OpenID Connect 認証を簡単に構成できます。 詳細については、ユーザー割り当て ID オプションに関する記事を参照してください。
必要なアクセス許可がお使いの Azure アカウントに与えられている場合、ユーザー割り当て ID を作成できます。 必要なアクセス許可がない場合、[ID] ドロップダウン メニューで既存のユーザー割り当てマネージド ID を選択できます。
Web サイト共同作成者ロールを利用すると、Azure 管理者と共同でユーザー割り当てマネージド ID を作成できます。
詳しくは、「Azure App Service への継続的デプロイ」をご覧ください。
GitHub Actions ワークフローを手動設定する
デプロイ センターを使用せずにワークフローをデプロイできます。 その場合は、次の 3 つの手順を実行する必要があります。
-
デプロイ資格情報を生成する
-
GitHub シークレットを構成する
-
GitHub リポジトリにワークフロー ファイルを追加する
デプロイ資格情報を生成する
GitHub Actions 用の Azure App Services での認証で推奨される方法は、Open ID Connect を使用することです。 このアプローチは、短期間のトークンを使用する認証方法です。
GitHub Actions を使用して OpenID Connect を設定する場合、より複雑な作業になりますが、セキュリティが強化されます。
代わりに、ユーザー割り当てマネージド ID、サービス プリンシパル、または発行プロファイルを使用して認証することもできます。
次の手順で、Azure CLI ステートメントを使用して、Microsoft Entra アプリケーション、サービス プリンシパル、およびフェデレーション資格情報を作成する手順について説明します。 Microsoft Entra アプリケーション、サービス プリンシパル、およびフェデレーション資格情報を Azure portal で作成する方法については、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 出力のアプリ ID に置き換えてください。
このコマンドを実行すると、次のステップで使用される異なる objectId
を持つ JSON 出力を生成します。 新しい objectId
は assignee-object-id
です。
後で AZURE_TENANT_ID
の GitHub シークレットとして使用するために、appOwnerTenantId
をコピーします。
az ad sp create --id $appId
サブスクリプションとオブジェクト別に新しいロールの割り当てを作成します。 既定では、このロールの割り当ては既定のサブスクリプションに紐づけられます。
$subscriptionId
をサブスクリプション ID に、$resourceGroupName
をリソース グループ名に、$webappName
を Web アプリ名に、$assigneeObjectId
を生成された id
に置き換えます。
Azure CLI を使用して Azure サブスクリプションを管理する方法について説明します。
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
次のコマンドを実行して、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
です。
- プル要求イベントによってトリガーされるワークフローの場合:
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 で、お使いのアプリ サービスに移動します。
[概要] ページで、[発行プロファイルのダウンロード] を選択します。
ダウンロードしたファイルを保存します。 このファイルの内容を使用して、GitHub シークレットを作成します。
Note
2020 年 10 月の時点で、Linux Web アプリでは、発行プロファイルをダウンロードする前に、アプリ設定 WEBSITE_WEBDEPLOY_USE_SCM
を true
に設定する必要があります。 この要件は、今後削除される予定です。
サービス プリンシパルは、Azure CLI で az ad sp create-for-rbac コマンドを使用して作成できます。 このコマンドは、Azure portal で Azure Cloud Shell を使用するか、[Cloud Shell を開く] を選択して実行します。
az ad sp create-for-rbac --name "myApp" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
前述の例で、プレースホルダーを自分のサブスクリプション ID、リソース グループ名、アプリ名に置き換えます。 出力は、次の JSON スニペットに類似した App Service アプリへのアクセスを提供するロールの割り当ての資格情報を含む JSON オブジェクトとなります。 この JSON オブジェクトを後のためにコピーします。
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
重要
常に最小限のアクセス権を付与することをお勧めします。 前の例の範囲は、リソース グループ全体ではなく、特定の App Service アプリに限定されます。
Azure/ログイン アクションにアプリケーションのクライアント ID、テナント ID、サブスクリプション ID を指定する必要があります。 これらの値は、ワークフロー内で直接指定するか、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 |
[Add secret](シークレットの追加) を選択して各シークレットを保存します。
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 }}
GitHub でリポジトリを参照します。
[設定]>[セキュリティ]>[シークレットと変数]>[アクション]>[新しいリポジトリ シークレット] を選択します。
前のセクションで作成したユーザー レベルの資格情報を使用するには、Azure CLI コマンドの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに AZURE_CREDENTIALS
という名前を付けます。
GitHub ワークフロー ファイルを後で構成するとき、Azure/ログインの入力 creds
にシークレットを使用します。 次に例を示します。
- 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 アクションを使用します。 このアクションでは、Web アプリの名前が app-name
に必要となり、また、言語スタックに基づき、デプロイする *.zip、*.war、*.jar、またはフォルダーのパスが package
に必要になります。
azure/webapps-deploy@v3
アクションの入力可能値の完全一覧については、action.yml を参照してください。
以下の例は、サポートされているさまざまな言語で Web アプリをビルドするワークフローの一部です。
構成したマネージド ID を利用して OpenID Connect でデプロイするには、client-id
、tenant-id
、subscription-id
キーで azure/login@v2
アクションを使用します。 前に作成した 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:
# Checkout 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 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:
# checkout 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'
ビルドとデプロイに複数のジョブを使用するこの完全な例も参照してください。
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: '18.x' # set this to the node version to use
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# checkout 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 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:
# 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'
NuGet と認証に publish-profile
を使用する ASP.NET 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
jar
ではなく war
をデプロイするには、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'
ビルドとデプロイに複数のジョブを使用するこの完全な例も参照してください。
アプリの発行プロファイルを使用する 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: '18.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 }}
構成したサービス プリンシパルでデプロイするには、creds
キーで azure/login@v2
アクションを使用し、前に参照した 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:
# Checkout the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# 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 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 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:
# checkout 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 サービス プリンシパルを使用する 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: '18.x' # set this to the node version to use
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# checkout 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 を参照してください。
Az 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
CLI 向け GitHub アクションに関する詳細と、その使用および構成方法については、Azure CLI の GitHub アクションに関する記事を参照してください。
az webapp deploy コマンドに関する詳細とその使用方法、およびパラメーターの詳細については、az webapp deploy に関するドキュメントを参照してください。
スタートアップ ファイルをデプロイするにはどうすればいいですか?
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 アクションを使用すれば、カスタム コンテナーを App Service にデプロイするワークフローを、GitHub Actions を使用して自動化できます。 GitHub Actions を使用してデプロイする手順の詳細については、コンテナーへのデプロイに関する記事を参照してください。
デプロイ後に 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 Actions とワークフロー上の参照を確認します。