Använd GitHub Actions för att automatisera arbetsflödet och distribuera till Azure App Service från GitHub.
Förutsättningar
Konfigurera GitHub Actions-distribution när du skapar en app
GitHub Actions-distributionen är integrerad i standardprocessen Skapa webbapp. Ange Kontinuerlig distribution till Aktivera på fliken Distribution och konfigurera din valda organisation, lagringsplats och gren.
När du aktiverar kontinuerlig distribution väljer processen Skapa webbapp automatiskt autentiseringsmetoden baserat på det grundläggande autentiseringsvalet och konfigurerar appen och GitHub-lagringsplatsen i enlighet med detta:
Konfigurera GitHub Actions-distribution från Deployment Center
För en befintlig app kan du snabbt komma igång med GitHub Actions med hjälp av Deployment Center i App Service. Den här nyckelfärdiga metoden genererar en GitHub Actions-arbetsflödesfil baserat på din programstack och committerar den till din GitHub-lagringsplats.
Med hjälp av Distributionscenter kan du också enkelt konfigurera den säkrare OpenID Connect-autentiseringen med en användartilldelad identitet. Mer information finns i alternativet för användartilldelad identitet.
Om ditt Azure-konto har de behörigheter som krävs kan du skapa en användartilldelad identitet. Annars kan du välja en befintlig användartilldelad hanterad identitet i listrutan Identitet . Du kan samarbeta med din Azure-administratör för att skapa en användartilldelad hanterad identitet med Webbplatsdeltagare-rollen.
Mer information finns i Kontinuerlig distribution till Azure App Service.
Konfigurera ett GitHub Actions-arbetsflöde manuellt
Du kan distribuera ett arbetsflöde utan att använda Distributionscenter. Utför följande tre steg:
-
Generera autentiseringsuppgifter för distribution.
-
Konfigurera GitHub-hemligheten.
-
Lägg till arbetsflödesfilen på din GitHub-lagringsplats.
Generera autentiseringsuppgifter för distribution
Vi rekommenderar att du använder OpenID Connect för att autentisera med Azure App Service för GitHub Actions. Den här autentiseringsmetoden använder kortlivade token. Att konfigurera OpenID Connect med GitHub Actions är mer komplext men ger förstärkt säkerhet.
Du kan också autentisera med en användartilldelad hanterad identitet, ett huvudnamn för tjänsten eller en publiceringsprofil.
Följande procedur beskriver stegen för att skapa ett Microsoft Entra-program, tjänstens huvudnamn och federerade autentiseringsuppgifter med hjälp av Azure CLI-instruktioner. Information om hur du skapar ett Microsoft Entra-program, tjänstens huvudnamn och federerade autentiseringsuppgifter i Azure-portalen finns i Ansluta GitHub och Azure.
Om du inte har en befintlig applikation, registrera en ny Microsoft Entra-applikation och ett tjänstehuvudnamn som kan komma åt resurser. Skapa Microsoft Entra-programmet.
az ad app create --display-name myApp
Det här kommandot returnerar ett JSON-utdata med en appId som motsvarar din client-id. Spara värdet som ska användas som AZURE_CLIENT_ID GitHub-hemlighet senare.
Du använder värdet objectId när du skapar federerade autentiseringsuppgifter med Graph API och refererar till det som APPLICATION-OBJECT-ID.
Skapa ett huvudnamn för tjänsten.
$appID Ersätt med appId från dina JSON-utdata.
Det här kommandot genererar en JSON-utdata med en annan objectId att använda i nästa steg. Den nya objectId är assignee-object-id.
appOwnerTenantId Kopiera till senare användning som en GitHub-hemlighet för AZURE_TENANT_ID.
az ad sp create --id $appId
Skapa en ny rolltilldelning efter prenumeration och objekt. Som standard är rolltilldelningen kopplad till din standardprenumeration. Ersätt $subscriptionId med ditt prenumerations-ID, $resourceGroupName med resursgruppens namn, $webappName med webbappens namn och $assigneeObjectId med det genererade id. Lär dig hur du hanterar Azure-prenumerationer med Azure CLI.
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
Kör följande kommando för att skapa en ny federerad identitetsautentiseringsuppgift för din Microsoft Entra-app.
Ersätt APPLICATION-OBJECT-ID med det appId som du genererade när appen skapades för ditt Active Directory-program.
Ange ett värde som CREDENTIAL-NAME ska refereras senare.
Ange subject. GitHub definierar dess värde beroende på ditt arbetsflöde:
- För jobb i din GitHub Actions-miljö använder du:
repo:< Organization/Repository >:environment:< Name >
- För jobb som inte är knutna till en miljö inkluderar du referenssökvägen för gren/tagg baserat på referenssökvägen som används för att utlösa arbetsflödet:
repo:< Organization/Repository >:ref:< ref path>. Exempel: repo:n-username/ node_express:ref:refs/heads/my-branch eller repo:n-username/ node_express:ref:refs/tags/my-tag.
- För arbetsflöden som utlöses av en pull-begärandehändelse använder du:
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"
]
}
En publiceringsprofil är en autentiseringsuppgift på appnivå. Konfigurera din publiceringsprofil som en GitHub-hemlighet.
Gå till App Service i Azure-portalen.
På sidan Översikt väljer du Ladda ned publiceringsprofil.
Spara den nedladdade filen. Använd innehållet i filen för att skapa en GitHub-hemlighet.
Anteckning
Från och med oktober 2020 måste Linux-webbappar ha appinställningen WEBSITE_WEBDEPLOY_USE_SCM konfigurerad trueinnan publiceringsprofilen laddas ned.
Du kan skapa ett huvudnamn för az ad sp create-for-rbac tjänsten med kommandot i Azure CLI. Kör det här kommandot i Azure-portalen med Azure Cloud Shell eller genom att välja Öppna 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
I föregående exempel ersätter du platshållarna med ditt prenumerations-ID, resursgruppsnamn och appnamn. Utdata är ett JSON-objekt med autentiseringsuppgifterna för rolltilldelning som ger åtkomst till din App Service-app. Utdata bör se ut ungefär som följande JSON-kodfragment. Kopiera det här JSON-objektet för senare.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
Viktigt!
Vi rekommenderar att du beviljar minsta möjliga åtkomst. Omfånget i föregående exempel är begränsat till den specifika App Service-appen och inte hela resursgruppen.
Du måste ange programmets klient-ID, klient-ID och prenumerations-ID för åtgärden Azure/login . Dessa värden kan antingen anges direkt i arbetsflödet eller lagras i GitHub-hemligheter och refereras till i arbetsflödet. Att spara värdena som GitHub-hemligheter är det säkrare alternativet.
Öppna din GitHub-lagringsplats och gå till >
Skapa hemligheter för AZURE_CLIENT_ID, AZURE_TENANT_IDoch AZURE_SUBSCRIPTION_ID. Använd dessa värden från ditt Active Directory-program för dina GitHub-hemligheter:
| GitHub-hemlighet |
Active Directory-applikation |
AZURE_CLIENT_ID |
App-ID (klient-ID) |
AZURE_TENANT_ID |
Katalog-ID (hyresgäst) |
AZURE_SUBSCRIPTION_ID |
Prenumerations-ID |
Välj Lägg till hemlighet för att spara varje hemlighet.
I GitHub bläddrar du till din lagringsplats. Välj Inställningar>Säkerhet>Hemligheter och variabler>Åtgärder>Ny repository-hemlighet.
Om du vill använda autentiseringsuppgifterna på appnivå som du skapade i föregående avsnitt klistrar du in innehållet i den nedladdade publiceringsprofilfilen i hemlighetens värdefält. Ge AZURE_WEBAPP_PUBLISH_PROFILE hemligheten ett namn.
När du konfigurerar GitHub-arbetsflödesfilen senare använder du AZURE_WEBAPP_PUBLISH_PROFILE i åtgärden Distribuera Azure Web App . Till exempel:
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
I GitHub bläddrar du till din lagringsplats. Välj Inställningar>Säkerhet>Hemligheter och variabler>Åtgärder>Ny repository-hemlighet.
Om du vill använda autentiseringsuppgifterna på användarnivå som du skapade i föregående avsnitt klistrar du in hela JSON-utdata från Azure CLI-kommandot i hemlighetens värdefält. Ge AZURE_CREDENTIALS hemligheten ett namn.
När du senare konfigurerar GitHub-arbetsflödesfilen använder du hemligheten för indata creds av Azure/login. Till exempel:
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Lägg till arbetsflödesfilen på din GitHub-lagringsplats
En YAML-fil (.yml) i /.github/workflows/ sökvägen i din GitHub-lagringsplats definierar ett arbetsflöde. Den här definitionen innehåller de olika steg och parametrar som utgör arbetsflödet.
Arbetsflödesfilen har minst följande distinkta steg:
- Autentisera med App Service med hjälp av GitHub-hemligheten som du skapade.
- Skapa webbappen.
- Distribuera webbappen.
Använd åtgärden azure/webapps-deploy@v3 för att distribuera koden till en App Service-app. Åtgärden kräver namnet på webbappen i app-name och, beroende på din språkstack, sökvägen till en *.zip, *.war, *.jareller mapp som ska distribueras i package. En fullständig lista över möjliga indata för åtgärden finns i azure/webapps-deploy@v3 action.yml.
I följande exempel visas den del av arbetsflödet som skapar webbappen på olika språk som stöds.
Om du vill distribuera med OpenID Connect med hjälp av den hanterade identitet som du konfigurerade, använder du åtgärden med nycklarna azure/login@v2, client-id, tenant-id och subscription-id. Använd GitHub-hemligheter som du skapade tidigare.
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
Skapa och distribuera en ASP.NET model-view-controller-app (MVC) till Azure med hjälp av ett tjänsthuvud för Azure. I exemplet används GitHub-hemligheter för client-idvärdena , tenant-idoch subscription-id . Du kan också skicka dessa värden direkt i inloggningsåtgärden.
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
Skapa och distribuera en Java Spring Boot-app till Azure genom att använda en tjänstprincip för Azure. I exemplet används GitHub-hemligheter för client-idvärdena , tenant-idoch subscription-id . Du kan också skicka dessa värden direkt i inloggningsåtgärden.
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'
Här är ett fullständigt exempel som använder flera jobb för att skapa och distribuera.
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:
# 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
Indata publish-profile bör referera till GitHub-hemligheten AZURE_WEBAPP_PUBLISH_PROFILE som du skapade tidigare.
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'
Skapa och distribuera en ASP.NET MVC-app (model-view-controller) som använder NuGet och publish-profile för autentisering.
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/'
Skapa och distribuera en Java Spring Boot-app till Azure med hjälp av en Azure-publiceringsprofil. Indata publish-profile refererar till hemligheten AZURE_WEBAPP_PUBLISH_PROFILE som du skapade tidigare.
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
Om du vill distribuera en war i stället för en jarändrar du värdet 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
Skapa och distribuera en Tomcat-app till Azure med hjälp av en Azure-publiceringsprofil. Indata publish-profile refererar till hemligheten AZURE_WEBAPP_PUBLISH_PROFILE som du skapade tidigare.
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'
Här är ett fullständigt exempel som använder flera jobb för att skapa och distribuera.
Skapa och distribuera en Node.js app till Azure med hjälp av appens publiceringsprofil. Indata publish-profile refererar till hemligheten AZURE_WEBAPP_PUBLISH_PROFILE som du skapade tidigare.
# 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 }}
Skapa och distribuera en Python-app till Azure med hjälp av appens publiceringsprofil. Observera hur publish-profile indata refererar till hemligheten AZURE_WEBAPP_PUBLISH_PROFILE som du skapade tidigare.
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 }}
För att distribuera med det tjänstehuvud som du konfigurerade, använder du azure/login@v2 åtgärden med creds nyckeln och refererar till hemligheten AZURE_CREDENTIALS som du skapade tidigare.
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
Skapa och distribuera en ASP.NET model-view-controller-app (MVC) till Azure med hjälp av ett tjänsthuvud för Azure. Indata creds refererar till hemligheten AZURE_CREDENTIALS som du skapade tidigare.
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
Skapa och distribuera en Java Spring Boot-app till Azure genom att använda en tjänstprincip för Azure. Indata creds refererar till hemligheten AZURE_CREDENTIALS som du skapade tidigare.
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
Skapa och distribuera en Tomcat-app till Azure med hjälp av ett Huvudnamn för Azure-tjänsten. Indata creds refererar till hemligheten AZURE_CREDENTIALS som du skapade tidigare.
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'
Här är ett fullständigt exempel som använder flera jobb för att skapa och distribuera.
Skapa och distribuera en Node.js-app till Azure med hjälp av ett Azure tjänstehuvudnamn. Indata creds refererar till hemligheten AZURE_CREDENTIALS som du skapade tidigare.
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:
# 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
Skapa och distribuera en Python-app till Azure med hjälp av ett huvudnamn för Azure-tjänsten. Indata creds refererar till hemligheten AZURE_CREDENTIALS som du skapade tidigare.
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
Vanliga frågor och svar
Hur distribuerar jag en WAR-fil via Maven-plugin-programmet?
Om du har konfigurerat ditt Java Tomcat-projekt med Maven-plugin-programmet kan du även distribuera till Azure App Service via det här plugin-programmet. Om du använder Azure CLI GitHub-åtgärden använder den dina Azure-autentiseringsuppgifter.
- name: Azure CLI script file
uses: azure/cli@v2
with:
inlineScript: |
mvn package azure-webapp:deploy
Mer information om hur du använder och konfigurerar Plugin-programmet Maven finns i Maven-plugin-wikin för Azure App Service.
Hur distribuerar jag en WAR-fil via Azure CLI?
Om du föredrar att använda Azure CLI för att distribuera till App Service kan du använda GitHub-åtgärden för Azure CLI.
- 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
Mer information om hur du använder och konfigurerar GitHub-åtgärden för Azure CLI finns i Azure CLI GitHub-åtgärden.
Mer information om kommandot, inklusive hur du använder det och parameterinformationen, finns i az webapp deployaz webapp deploy.
Hur gör jag för att distribuera en startfil?
Använd GitHub-åtgärden för Azure CLI. Till exempel:
- 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
Hur implementerar jag till en container?
Med åtgärden Azure Web Deploy kan du automatisera arbetsflödet för att distribuera anpassade containrar till App Service med hjälp av GitHub Actions. Mer information finns i Distribuera till en container.
Hur gör jag för att uppdatera Tomcat-konfigurationen efter distributionen?
Om du vill uppdatera någon av inställningarna för webbappar efter distributionen kan du använda åtgärden App Service-inställningar .
- 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
Mer information om hur du använder och konfigurerar den här åtgärden finns i lagringsplatsen för App Service-inställningar .
Relaterat innehåll
Kolla in följande referenser i Azure GitHub Actions och arbetsflöden: