Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Планы "Базовый", "Стандартный" и "Корпоративный" вступили в пенсионный период 17 марта 2025 года. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.
Эта статья относится к:✅ Basic/Standard ✅ Enterprise
В этой статье показано, как создать рабочий процесс CI/CD для Azure Spring Apps с помощью GitHub Actions.
GitHub Actions поддерживает автоматизированный рабочий процесс жизненного цикла разработки программного обеспечения. С помощью GitHub Actions для Azure Spring Apps можно создавать рабочие процессы в репозитории для создания, тестирования, пакета, выпуска и развертывания в Azure.
Prerequisites
В этом примере требуется Azure CLI.
Настройка репозитория GitHub и проверка подлинности
Для авторизации действия входа в Azure требуются служебные учетные данные Azure. Чтобы получить учетные данные Azure, выполните следующие команды на локальном компьютере:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Чтобы получить доступ к определенной группе ресурсов, можно уменьшить область:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Команда должна выводить объект JSON:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
В этом примере используется пример steeltoe на GitHub. Сделайте форк репозитория, откройте страницу репозитория GitHub для форка и перейдите на вкладку "Параметры". Откройте меню "Секреты" и выберите "Создать секрет".
Задайте имя секрета AZURE_CREDENTIALS и установите его значение на строку JSON, найденную под заголовком Настройка репозитория GitHub и аутентификация.
Вы также можете получить учетные данные для входа Azure из Key Vault в GitHub Actions, как описано в статье Аутентификация Azure Spring с помощью Key Vault в GitHub Actions.
Подготовка экземпляра службы
Чтобы подготовить экземпляр службы Azure Spring Apps, выполните следующие команды с помощью Azure CLI.
az extension add --name spring
az group create \
--name <resource-group-name> \
--location eastus
az spring create \
--resource-group <resource-group-name> \
--name <service-instance-name>
az spring config-server git set \
--name <service-instance-name> \
--uri https://github.com/Azure-Samples/azure-spring-apps-samples \
--label main \
--search-paths steeltoe-sample/config
Создание рабочего процесса
Рабочий процесс определяется с помощью следующих параметров.
Подготовка к развертыванию с помощью Azure CLI
Команда az spring app create в настоящее время не идемпотентна. После его запуска вы получите ошибку при повторном выполнении той же команды. Мы рекомендуем использовать этот рабочий процесс в существующих приложениях и экземплярах Azure Spring Apps.
Используйте следующие команды Azure CLI для подготовки:
az config set defaults.group=<service-group-name>
az config set defaults.spring=<service-instance-name>
az spring app create --name planet-weather-provider
az spring app create --name solar-system-weather
Развертывание с помощью Azure CLI напрямую
Создайте файл .github/workflows/main.yml в репозитории со следующим содержимым. Замените <your resource group name> и <your service name> на их правильные значения.
name: Steeltoe-CD
# Controls when the action runs. Triggers the workflow on push or pull request
# events but only for the main branch
on:
push:
branches: [ main]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job runs on
runs-on: ubuntu-latest
env:
working-directory: ./steeltoe-sample
resource-group-name: <your resource group name>
service-name: <your service name>
# Supported .NET Core version matrix.
strategy:
matrix:
dotnet: [ '3.1.x' ]
# Steps represent a sequence of tasks that is executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Set up .NET Core 3.1 SDK
- uses: actions/setup-dotnet@v1
with:
dotnet-version: ${{ matrix.dotnet }}
# Set credential for az login
- uses: azure/login@v1.1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: install Azure CLI extension
run: |
az extension add --name spring --yes
- name: Build and package planet-weather-provider app
working-directory: ${{env.working-directory}}/src/planet-weather-provider
run: |
dotnet publish
az spring app deploy -n planet-weather-provider --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.PlanetWeatherProvider.dll --artifact-path ./publish-deploy-planet.zip -s ${{ env.service-name }} -g ${{ env.resource-group-name }}
- name: Build solar-system-weather app
working-directory: ${{env.working-directory}}/src/solar-system-weather
run: |
dotnet publish
az spring app deploy -n solar-system-weather --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.dll --artifact-path ./publish-deploy-solar.zip -s ${{ env.service-name }} -g ${{ env.resource-group-name }}
Настройка репозитория GitHub и проверка подлинности
Для авторизации действия входа в Azure требуются служебные учетные данные Azure. Чтобы получить учетные данные Azure, выполните следующие команды на локальном компьютере:
az login
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID> \
--json-auth
Чтобы получить доступ к определенной группе ресурсов, можно уменьшить область:
az ad sp create-for-rbac \
--role contributor \
--scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
--json-auth
Команда должна выводить объект JSON:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
...
}
В этом примере используется пример PiggyMetrics на GitHub. Создайте форк примера, в опции снимите флажок "Копировать только ветвь Azure", откройте страницу своего репозитория на GitHub и перейдите на вкладку "Параметры ". Откройте меню "Секреты" и выберите "Добавить новый секрет":
Установите имя секрета равным AZURE_CREDENTIALS и задайте его значение JSON-строке, найденной под заголовком Настройка репозитория GitHub и проверка подлинности.
Вы также можете получить учетные данные для входа Azure из Key Vault в GitHub Actions, как описано в статье Аутентификация Azure Spring с помощью Key Vault в GitHub Actions.
Создание экземпляра службы
Чтобы подготовить экземпляр службы Azure Spring Apps, выполните следующие команды с помощью Azure CLI.
az extension add --name spring
az group create --location eastus --name <resource group name>
az spring create -n <service instance name> -g <resource group name>
az spring config-server git set -n <service instance name> --uri https://github.com/xxx/piggymetrics --label config
Комплексные примеры рабочих процессов
В следующих примерах показаны распространенные сценарии использования.
Deploying
В следующих разделах показаны различные варианты развертывания приложения.
В продакшен
Azure Spring Apps поддерживает развертывание в развертываниях со встроенными артефактами (например, JAR или ZIP-файл .NET Core) или архивом исходного кода.
В следующем примере развертывается по умолчанию для производственной среды в Azure Spring Apps с использованием JAR-файла, созданного Maven. Этот пример является единственным возможным сценарием развертывания при использовании номера SKU уровня "Базовый".
Note
Шаблон поиска пакетов должен возвращать только один пакет. Если задача сборки создает несколько ПАКЕТОВ JAR, таких как sources.jar и javadoc.jar, необходимо уточнить шаблон поиска, чтобы он соответствовал только двоичному артефакту приложения.
name: AzureSpringApps
on: push
env:
ASC_PACKAGE_PATH: ${{ github.workspace }}
AZURE_SUBSCRIPTION: <azure subscription name>
jobs:
deploy_to_production:
runs-on: ubuntu-latest
name: deploy to production with artifact
steps:
- name: Checkout GitHub Action
uses: actions/checkout@v2
- name: Set up Java 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: maven build, clean
run: |
mvn clean package
- name: Login via Azure CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: deploy to production with artifact
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: Deploy
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: false
package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
В следующем примере выполняется развертывание рабочей среды по умолчанию в Azure Spring Apps с помощью исходного кода.
name: AzureSpringApps
on: push
env:
ASC_PACKAGE_PATH: ${{ github.workspace }}
AZURE_SUBSCRIPTION: <azure subscription name>
jobs:
deploy_to_production:
runs-on: ubuntu-latest
name: deploy to production with source code
steps:
- name: Checkout GitHub Action
uses: actions/checkout@v2
- name: Login via Azure CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: deploy to production step with source code
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: false
package: ${{ env.ASC_PACKAGE_PATH }}
Следующий пример развертывается в производственной среде по умолчанию в Azure Spring Apps с помощью исходного кода из плана Enterprise. Можно указать, какой построитель будет использоваться для развертывания действий с помощью builder параметра.
name: AzureSpringApps
on: push
env:
ASC_PACKAGE_PATH: ${{ github.workspace }}
AZURE_SUBSCRIPTION: <azure subscription name>
jobs:
deploy_to_production:
runs-on: ubuntu-latest
name: deploy to production with source code
steps:
- name: Checkout GitHub Action
uses: actions/checkout@v2
- name: Login via Azure CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: deploy to production step with source code in the Enterprise plan
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: false
package: ${{ env.ASC_PACKAGE_PATH }}
builder: <builder>
В следующем примере выполняется развертывание в продуктивной среде по умолчанию в Azure Spring Apps с существующим образом контейнера.
name: AzureSpringApps
on: push
env:
ASC_PACKAGE_PATH: ${{ github.workspace }}
AZURE_SUBSCRIPTION: <azure subscription name>
jobs:
deploy_to_production:
runs-on: ubuntu-latest
name: deploy to production with source code
steps:
- name: Checkout GitHub Action
uses: actions/checkout@v2
- name: Login via Azure CLI
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy Custom Image
uses: Azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
deployment-name: <deployment name>
container-registry: <your container image registry>
registry-username: ${{ env.REGISTRY_USERNAME }}
registry-password: ${{ secrets.REGISTRY_PASSWORD }}
container-image: <your image tag>
Во время развертывания можно добиться большей функциональности с помощью дополнительных аргументов. Дополнительные сведения см. в разделе «Аргументы»GitHub Action для развертывания в Azure Spring Apps.
Blue-green
Примеры ниже развертываются на существующую промежуточную площадку развертывания. Это развертывание не получает рабочий трафик, пока он не будет установлен в качестве рабочего развертывания. Можно установить параметр use-staging-deployment в значение true, чтобы автоматически найти промежуточное развертывание, или просто указать конкретное имя развертывания. Мы сосредоточимся только на spring-apps-deploy действии и опустим подготовительные этапы в остальной части статьи.
# environment preparation configurations omitted
steps:
- name: blue green deploy step use-staging-deployment
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: true
package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
# environment preparation configurations omitted
steps:
- name: blue green deploy step with deployment-name
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: deploy
service-name: <service instance name>
app-name: <app name>
deployment-name: staging
package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
Дополнительные сведения о развертывании blue-green, включая альтернативный подход, см. в стратегиях развертывания blue-green.
Настройка рабочего развертывания
Следующий пример задает текущее стейджинг-развертывание в качестве продуктивной среды, эффективно переключая, какое развертывание получает производственный трафик.
# environment preparation configurations omitted
steps:
- name: set production deployment step
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: set-production
service-name: <service instance name>
app-name: <app name>
use-staging-deployment: true
Удаление тестового развертывания
Это Delete Staging Deployment действие позволяет удалить развертывание, не получающее рабочий трафик. Это удаление освобождает ресурсы, используемые данным развертыванием, и дает возможность для нового стадийного развертывания.
# environment preparation configurations omitted
steps:
- name: Delete staging deployment step
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: delete-staging-deployment
service-name: <service instance name>
app-name: <app name>
Создание или обновление сборки (только для корпоративного плана)
В следующем примере создается или обновляется ресурс сборки в тарифном плане Enterprise:
# environment preparation configurations omitted
steps:
- name: Create or update build
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: build
service-name: <service instance name>
build-name: <build name>
package: ${{ env.ASC_PACKAGE_PATH }}
builder: <builder>
Удаление билда (только для Enterprise-плана)
В следующем примере удаляется ресурс сборки в плане Enterprise:
# environment preparation configurations omitted
steps:
- name: Delete build
uses: azure/spring-apps-deploy@v1
with:
azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
action: delete-build
service-name: <service instance name>
build-name: <build name>
Развертывание с помощью плагина Maven
Другим вариантом является использование подключаемого модуля Maven для развертывания jar-файла и обновления параметров приложения. Команда mvn azure-spring-apps:deploy идемпотентна и автоматически создает Приложения при необходимости. Вам не нужно заранее создавать соответствующие приложения.
name: AzureSpringApps
on: push
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Set up Java 11
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '11'
- name: maven build, clean
run: |
mvn clean package -DskipTests
# Maven plugin can consume this authentication method automatically
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Maven deploy, make sure you have correct configurations in your pom.xml
- name: deploy to Azure Spring Apps using Maven
run: |
mvn azure-spring-apps:deploy
Запуск рабочего процесса
Действия GitHub должны быть включены автоматически после отправки .github/workflow/main.yml в GitHub. Действие активируется при создании нового коммита. Если вы создадите этот файл в браузере, ваше действие уже должно было завершиться.
Чтобы убедиться, что действие включено, перейдите на вкладку "Действия " на странице репозитория GitHub:
Если действие выполняется с ошибкой, например если вы не установили учетные данные Azure, можно повторно выполнить проверки после исправления ошибки. На странице репозитория GitHub выберите "Действия", выберите конкретную задачу рабочего процесса и нажмите кнопку "Повторно выполнить проверки ", чтобы повторно выполнить проверки: