Используйте GitHub Actions для автоматизации рабочего процесса и развертывания в Службе приложений Azure из GitHub.
Предварительные условия
Настройка развертывания GitHub Actions при создании приложения
Развертывание GitHub Actions интегрировано в процесс создания веб-приложения по умолчанию. Задайте для непрерывного развертывания значение "Включить " на вкладке "Развертывание " и настройте выбранную организацию, репозиторий и ветвь.
При включении непрерывного развертывания процесс создания веб-приложения автоматически выбирает метод проверки подлинности на основе базового выбора проверки подлинности и настраивает приложение и репозиторий GitHub соответствующим образом:
Примечание.
При создании приложения может появиться сообщение об ошибке, которое указывает, что у вашей учетной записи Azure нет определенных разрешений. Вашей учетной записи могут потребоваться необходимые разрешения для создания и настройки удостоверения, назначаемого пользователем. Дополнительные сведения см. в следующем разделе.
Настройте развертывание GitHub Actions из Центра развертывания
Для существующего приложения вы можете быстро приступить к работе с GitHub Actions с помощью Центра развертывания в службе приложений. Готовый к использованию метод GitHub Actions создает файл рабочего процесса GitHub Actions на основе стека приложения и коммитит его в репозиторий GitHub.
С помощью Центра развертывания можно также легко настроить более безопасную проверку подлинности OpenID Connect с удостоверением, назначаемым пользователем. Для получения дополнительной информации см. вариант удостоверения, назначаемого пользователем.
Если у вашей учетной записи Azure есть необходимые разрешения, можно создать назначаемое пользователем удостоверение. В противном случае можно выбрать существующее управляемое удостоверение, назначаемое пользователем, в раскрывающемся меню "Удостоверение ". Вы можете работать с администратором Azure, чтобы создать управляемое удостоверение, назначаемое пользователем, с ролью участника веб-сайта.
Дополнительные сведения см. в статье "Непрерывное развертывание в службе приложений Azure".
Настройка рабочего процесса GitHub Actions вручную
Рабочий процесс можно развернуть без использования Центра развертывания. Выполните следующие три шага:
-
Создайте учетные данные развертывания.
-
Настройте секрет GitHub.
-
Добавьте файл рабочего процесса в репозиторий GitHub.
Создание учетных данных для развертывания.
Рекомендуется использовать OpenID Connect для проверки подлинности в Службе приложений Azure для действий GitHub. Этот метод проверки подлинности использует кратковременные токены. Настройка OpenID Connect с помощью GitHub Actions более сложна, но обеспечивает защищенное обеспечение безопасности.
Вы также можете пройти аутентификацию с помощью назначенного пользователем управляемого удостоверения, служебной учётной записи или профиля публикации.
В следующей процедуре описаны шаги по созданию приложения Microsoft Entra, учетной записи службы и федеративных учетных данных с помощью команд Azure CLI. Сведения о том, как создать приложение Microsoft Entra, учетную запись службы и федеративные учетные данные на портале Azure, см. в статье Подключение GitHub и Azure.
Если у вас нет существующего приложения, зарегистрируйте новое приложение Microsoft Entra и учетную запись службы для доступа к ресурсам. Создайте приложение Microsoft Entra.
az ad app create --display-name myApp
Эта команда возвращает JSON-вывод с appId
, который является вашим client-id
. Сохраните это значение, чтобы позднее применить в качестве секрета GitHub AZURE_CLIENT_ID
.
Вы используете значение objectId
, когда создаете федеративные учетные данные при помощи Graph API, и ссылаетесь на него как на APPLICATION-OBJECT-ID
.
Создайте служебный принципал. Замените тег $appID
на appId
из вашего JSON-вывода.
Эта команда создает выходные данные JSON с измененным элементом objectId
, который используется на следующем шаге. Новое objectId
является assignee-object-id
.
Скопируйте appOwnerTenantId
для использования в качестве секрета GitHub в будущем для AZURE_TENANT_ID
.
az ad sp create --id $appId
Создайте новое назначение роли по подписке и объекту. По умолчанию назначение роли привязано к вашей подписке по умолчанию. Замените $subscriptionId
на идентификатор вашей подписки, $resourceGroupName
на имя вашей группы ресурсов, $webappName
на имя вашего веб-приложения, а $assigneeObjectId
на созданный элемент id
. Узнайте, как управлять подписками Azure с помощью 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
Выполните следующую команду, чтобы создать новые федеративные учетные данные удостоверения для приложения Microsoft Entra.
Замените APPLICATION-OBJECT-ID
значением appId
, которое вы создали во время создания приложения для вашего приложения Active Directory.
Задайте значение для CREDENTIAL-NAME
, оно понадобится позже.
Задайте subject
. GitHub определяет его значение в зависимости от рабочего процесса:
- Для заданий в среде GitHub Actions используйте следующее:
repo:< Organization/Repository >:environment:< Name >
- Для заданий, не связанных с окружающей средой, включите путь ссылки для ветви или тега на основе пути ссылки, используемого для активации рабочего процесса:
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"
]
}
Профиль публикации — это учетные данные уровня приложения. Настройте профиль публикации в качестве секрета GitHub.
Перейдите в службу приложений на портале Azure.
На странице "Обзор" выберите "Скачать профиль публикации".
Сохраните скачанный файл. Используйте содержимое файла для создания секрета GitHub.
Примечание.
По состоянию на октябрь 2020 г., веб-приложения Linux должны установить параметр WEBSITE_WEBDEPLOY_USE_SCM
приложения перед true
скачиванием профиля публикации.
Субъект службы можно создать с помощью команды az ad sp create-for-rbac
в Azure CLI. Выполните эту команду с помощью Azure Cloud Shell на портале Azure или выбрав Open 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
В предыдущем примере замените заполнители идентификатором подписки, именем группы ресурсов и именем приложения. Выходные данные содержат объект JSON с учетными данными назначения роли, которые предоставляют доступ к приложению “Служба приложений”. Выходные данные должны выглядеть примерно так, как показано в следующем фрагменте КОДА JSON. Скопируйте этот объект JSON для последующего использования.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
Внимание
Рекомендуется предоставить минимальный доступ. Область в предыдущем примере ограничена конкретным приложением Службы приложений, а не всей группой ресурсов.
Необходимо указать идентификатор клиента приложения, идентификатор клиента и идентификатор подписки для Azure/login
действия. Эти значения могут быть указаны непосредственно в рабочем процессе или храниться в секретах GitHub с указанием ссылок на них в рабочем процессе. Сохранение значений в виде секретов GitHub является более безопасным вариантом.
Откройте репозиторий GitHub и перейдите в раздел Настройки>Безопасность>Секреты и переменные>Действия>Новый секрет репозитория.
Создайте секреты для AZURE_CLIENT_ID
, AZURE_TENANT_ID
и AZURE_SUBSCRIPTION_ID
. Используйте эти значения из приложения Active Directory для секретов GitHub:
Секрет GitHub |
Приложение Active Directory |
AZURE_CLIENT_ID |
Идентификатор приложения (клиент) |
AZURE_TENANT_ID |
Идентификатор каталога (арендатора) |
AZURE_SUBSCRIPTION_ID |
ИД подписки |
Нажмите кнопку "Добавить секрет" , чтобы сохранить каждый секрет.
В GitHub перейдите к репозиторию. Выберите Настройки>Безопасность>Секреты и переменные>Действия>Новый секрет репозитория.
Чтобы использовать учетные данные уровня приложения, созданные в предыдущем разделе, вставьте содержание скаченного файла профиля публикации в поле значения секретного ключа. Присвойте этому секрету имя AZURE_WEBAPP_PUBLISH_PROFILE
.
При последующей настройке файла рабочего процесса GitHub используйте действие AZURE_WEBAPP_PUBLISH_PROFILE
в операции развертывания Azure Web App. Например:
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
В GitHub перейдите к репозиторию. Выберите Настройки>Безопасность>Секреты и переменные>Действия>Новый секрет репозитория.
Чтобы использовать учетные данные уровня пользователя, созданные в предыдущем разделе, вставьте весь результат JSON из команды Azure CLI в поле значения секрета. Присвойте этому секрету имя AZURE_CREDENTIALS
.
При последующей настройке файла рабочего процесса GitHub используйте секрет для входного параметра creds
Azure/login
. Например:
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Добавление файла рабочего процесса в репозиторий GitHub
Файл YAML (.yml) в /.github/workflows/
пути в репозитории GitHub определяет рабочий процесс. Это определение содержит разные шаги и параметры рабочего процесса.
Как минимум, файл рабочего процесса имеет следующие отдельные шаги:
- Проверка подлинности с помощью службы приложений с помощью созданного секрета GitHub.
- Создайте веб-приложение.
- Разверните веб-приложение.
Чтобы развернуть свой код в приложении App Service, используйте действие azure/webapps-deploy@v3
. Для выполнения этого действия требуется имя вашего веб-приложения в app-name
, а также, в зависимости от стека вашего языка программирования, указание пути к *.zip
, *.war
, *.jar
или папке для развертывания в package
. Полный список возможных входных данных для azure/webapps-deploy@v3
действия см . в action.yml.
В следующих примерах показана часть рабочего процесса, которая создает веб-приложение на разных поддерживаемых языках.
Чтобы развернуть с помощью 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
Создайте и разверните приложение ASP.NET модель-представление-контроллер (MVC) в Azure с помощью служебного принципала Azure. В примере используются секреты GitHub для значений client-id
, tenant-id
и subscription-id
. Эти значения также можно передать непосредственно в действии входа.
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/[email protected]
- 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
Создайте и разверните приложение Java Spring Boot в Azure с помощью учетной записи службы Azure. В примере используются секреты GitHub для значений client-id
, tenant-id
и subscription-id
. Вы также можете передать эти значения непосредственно в процессе входа в систему.
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/[email protected]
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:
# 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'
Создайте и разверните приложение ASP.NET model-view-controller (MVC), использующее NuGet и publish-profile
для проверки подлинности.
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/[email protected]
- 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/'
Создайте и разверните приложение Java Spring Boot в Azure с помощью профиля публикации 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
Создайте и разверните приложение Tomcat в Azure с помощью профиля публикации 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/[email protected]
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 }}
Чтобы развернуть с помощью настроенного вами субъекта-службы, используйте 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
Создайте и разверните приложение ASP.NET модель-представление-контроллер (MVC) в Azure с использованием основного элемента службы Azure. Ранее созданный секретный ключ AZURE_CREDENTIALS
ссылается на входные данные creds
.
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/[email protected]
- 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
Создайте и разверните приложение Java Spring Boot в Azure, используя учетную запись службы 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
Создайте и разверните приложение Tomcat в Azure с помощью служебного принципала 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/[email protected]
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'
Ниже приведен полный пример использования нескольких заданий для сборки и развертывания.
Создайте и разверните приложение Node.js в Azure с помощью учетной записи службы 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:
# 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
Создайте и разверните приложение Python в Azure с помощью служебного принципала 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
Часто задаваемые вопросы
Как развернуть WAR-файл с помощью подключаемого модуля Maven?
Если вы настроили проект Java Tomcat с подключаемым модулем Maven, вы также можете развернуть в Службе приложений Azure с помощью этого подключаемого модуля. Если вы используете действие GitHub Azure CLI, оно использует учетные данные Azure.
- name: Azure CLI script file
uses: azure/cli@v2
with:
inlineScript: |
mvn package azure-webapp:deploy
Дополнительные сведения об использовании и настройке подключаемого модуля Maven см. в вики по подключаемому модулю Maven для службы приложений Azure.
Как развернуть WAR-файл с помощью Azure CLI?
Если вы предпочитаете использовать Azure CLI для развертывания в Службе приложений, можно использовать действие GitHub для 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
Дополнительные сведения об использовании и настройке действия Azure CLI для GitHub см. в разделе действие Azure CLI для GitHub.
Дополнительные сведения о команде az webapp deploy
, включая его использование и сведения о параметрах, см az webapp deploy
. в документации.
Разделы справки развернуть файл запуска?
Используйте действие GitHub для Azure CLI. Например:
- 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. Дополнительные сведения см. в разделе "Развертывание в контейнере".
Как обновить конфигурацию Tomcat после развертывания?
Если вы хотите обновить любой из параметров веб-приложений после развертывания, можно использовать действие параметров службы приложений .
- 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
Дополнительные сведения об использовании и настройке этого действия см. в репозитории параметров службы приложений .
Связанный контент
Посмотрите следующие ссылки на Azure GitHub Actions и рабочие процессы.