Упражнение. Добавление действия развертывания Bicep в рабочий процесс
Вы создали базовый рабочий процесс и настроили среды Azure и GitHub для подключения. Теперь вы готовы развернуть Bicep-файл вашего веб-сайта в Azure из вашего рабочего процесса.
В этом упражнении вы узнаете:
- Добавьте Bicep-файл в репозиторий.
- Добавьте шаг рабочего процесса, чтобы скачать исходный код репозитория в файловую систему runner.
- Добавьте шаг рабочего процесса для входа в Azure.
- Добавьте шаг рабочего процесса для развертывания файла Bicep.
- Снова запустите рабочий процесс и убедитесь, что он успешно развернул веб-сайт.
Добавьте Bicep-файл вашего веб-сайта в репозиторий GitHub
Вы уже подготовили Bicep-файл веб-сайта, который можно использовать для развертывания различных конфигураций ресурсов веб-сайта в зависимости от среды и конфигурации. Здесь вы добавите файл Bicep в репозиторий.
Откройте обозреватель Visual Studio Code.
В корне репозитория создайте папку для развертывания .
В папке развертывания создайте файл с именем main.bicep. Убедитесь, что вы создаете файл в папке развертывания .
Скопируйте следующий код в файл main.bicep.
@description('The Azure region into which the resources should be deployed.') param location string = resourceGroup().location @description('The type of environment. This must be nonprod or prod.') @allowed([ 'nonprod' 'prod' ]) param environmentType string @description('A unique suffix to add to resource names that need to be globally unique.') @maxLength(13) param resourceNameSuffix string = uniqueString(resourceGroup().id) var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website-plan' var toyManualsStorageAccountName = 'toyweb${resourceNameSuffix}' // Define the SKUs for each component based on the environment type. var environmentConfigurationMap = { nonprod: { appServicePlan: { sku: { name: 'F1' capacity: 1 } } toyManualsStorageAccount: { sku: { name: 'Standard_LRS' } } } prod: { appServicePlan: { sku: { name: 'S1' capacity: 2 } } toyManualsStorageAccount: { sku: { name: 'Standard_ZRS' } } } } var toyManualsStorageAccountConnectionString = 'DefaultEndpointsProtocol=https;AccountName=${toyManualsStorageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${toyManualsStorageAccount.listKeys().keys[0].value}' resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: environmentConfigurationMap[environmentType].appServicePlan.sku } resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'ToyManualsStorageAccountConnectionString' value: toyManualsStorageAccountConnectionString } ] } } } resource toyManualsStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = { name: toyManualsStorageAccountName location: location kind: 'StorageV2' sku: environmentConfigurationMap[environmentType].toyManualsStorageAccount.sku }
Сохраните изменения в файле.
В терминале Visual Studio Code запустите этот код, чтобы выполнить изменения, зафиксировать изменения и отправить изменения в репозиторий:
git add deploy/main.bicep git commit -m 'Add Bicep file' git push
Замена шагов рабочего процесса
Затем обновите определение рабочего процесса для развертывания Bicep-файла в Azure.
В Visual Studio Code откройте файл .github/workflows/workflow.yml.
В верхней части файла между
on:
иjobs:
добавьте разделpermissions:
.name: deploy-toy-website on: [workflow_dispatch] permissions: id-token: write contents: read jobs:
Это изменение позволяет рабочему процессу использовать идентификатор рабочей нагрузки.
Переименуйте задание
say-hello
вdeploy
:jobs: deploy: runs-on: ubuntu-latest steps:
Чтобы удалить
placeholder
шаг из определения рабочего процесса, удалите две нижние строки файла.В качестве первого шага вы добавите задачу, чтобы извлечь код в файловую систему runner. Добавьте новый шаг в нижней части файла:
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3
Заметка
Рекомендуется ввести этот код самостоятельно, а не копировать и вставляя его из этого модуля. Обратите внимание на отступы в файле. Если отступ не является правильным, файл YAML не будет допустимым. Visual Studio Code указывает на ошибки, отображая волнистые линии.
Под только что добавленным шагом добавьте задачу для входа в среду Azure. Эта задача использует секреты, определенные ранее, чтобы войти с использованием учетной записи рабочей нагрузки.
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Под добавленным шагом добавьте еще один шаг для выполнения развертывания Bicep:
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT }}
Обратите внимание, что эта задача использует переменную среды по умолчанию
github.run_number
для именования развертываний в Azure. Он также использует переменные среды для имени группы ресурсов и для параметраenvironmentType
в файле Bicep.Добавьте эти переменные и их значения в верхней части файла рабочего процесса между
permissions:
иjobs
:name: deploy-toy-website on: [workflow_dispatch] permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyWebsite ENVIRONMENT: nonprod jobs:
Сохраните изменения в файле. Файл должен выглядеть следующим образом:
name: deploy-toy-website on: [workflow_dispatch] permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyWebsite ENVIRONMENT: nonprod jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT }}
В терминале Visual Studio Code выполните изменения, зафиксируйте их в репозиторий и отправьте их в Azure Repos:
git add . git commit -m 'Add Azure CLI tasks to workflow' git push
Запуск рабочего процесса
Теперь вы готовы запустить рабочий процесс!
В браузере откройте рабочий процесс, выбрав Действия>развертывания сайта игрушек.
Выберите Запустить рабочий процесс>запустить рабочий процесс.
Новый запуск рабочего процесса появится в списке запусков. Если он не отображается, обновите страницу браузера.
Выберите выполняемый рабочий процесс, чтобы просмотреть сведения о выполнении.
Дождитесь завершения выполнения.
Выберите задание на развертывание .
Выберите Выполнить azure/arm-deploy@v1. Здесь отображаются сведения о задаче.
Выберите Run azure/arm-deploy@v1 в описании задачи.
Обратите внимание, что на этом шаге используются переменные среды, добавленные в файл рабочего процесса.
Проверьте остальные выходные данные рабочего процесса.
Рабочий процесс отображает успешное развертывание системы.
Проверка развертывания
Перейдите на портал Azure.
В левом меню выберите пункт Группы ресурсов.
Выберите ToyWebsite.
В обзорпросмотрите состояние развертывания. Вы увидите, что одно развертывание выполнено успешно.
Выберите ссылку 1 Успешно выполнено, чтобы просмотреть сведения о развертывании.
Обратите внимание, что имя развертывания соответствует номеру выполнения рабочего процесса в GitHub Actions, так как для имени развертывания использовался переменная среды
github.run_number
.Чтобы узнать, какие ресурсы были развернуты, выберите развертывание. Чтобы развернуть развертывание и просмотреть дополнительные сведения, выберите сведения о развертывании. В этом случае есть учетная запись хранения, план службы приложений Azure и приложение.