Упражнение. Добавление действия развертывания Bicep в рабочий процесс

Завершено

Вы создали базовый рабочий процесс и настроили среды Azure и GitHub для подключения. Теперь вы готовы развернуть Bicep-файл вашего веб-сайта в Azure из вашего рабочего процесса.

В этом упражнении вы узнаете:

  • Добавьте Bicep-файл в репозиторий.
  • Добавьте шаг рабочего процесса, чтобы скачать исходный код репозитория в файловую систему runner.
  • Добавьте шаг рабочего процесса для входа в Azure.
  • Добавьте шаг рабочего процесса для развертывания файла Bicep.
  • Снова запустите рабочий процесс и убедитесь, что он успешно развернул веб-сайт.

Добавьте Bicep-файл вашего веб-сайта в репозиторий GitHub

Вы уже подготовили Bicep-файл веб-сайта, который можно использовать для развертывания различных конфигураций ресурсов веб-сайта в зависимости от среды и конфигурации. Здесь вы добавите файл Bicep в репозиторий.

  1. Откройте обозреватель Visual Studio Code.

  2. В корне репозитория создайте папку для развертывания .

  3. В папке развертывания создайте файл с именем main.bicep. Убедитесь, что вы создаете файл в папке развертывания .

    снимок экрана обозревателя Visual Studio Code с выделенным основным файлом bicep, который расположен в папке deploy.

  4. Скопируйте следующий код в файл 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
    }
    
  5. Сохраните изменения в файле.

  6. В терминале Visual Studio Code запустите этот код, чтобы выполнить изменения, зафиксировать изменения и отправить изменения в репозиторий:

    git add deploy/main.bicep
    git commit -m 'Add Bicep file'
    git push
    

Замена шагов рабочего процесса

Затем обновите определение рабочего процесса для развертывания Bicep-файла в Azure.

  1. В Visual Studio Code откройте файл .github/workflows/workflow.yml.

  2. В верхней части файла между on: и jobs:добавьте раздел permissions:.

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    jobs:
    

    Это изменение позволяет рабочему процессу использовать идентификатор рабочей нагрузки.

  3. Переименуйте задание say-hello в deploy:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
    
  4. Чтобы удалить placeholder шаг из определения рабочего процесса, удалите две нижние строки файла.

  5. В качестве первого шага вы добавите задачу, чтобы извлечь код в файловую систему runner. Добавьте новый шаг в нижней части файла:

    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
    

    Заметка

    Рекомендуется ввести этот код самостоятельно, а не копировать и вставляя его из этого модуля. Обратите внимание на отступы в файле. Если отступ не является правильным, файл YAML не будет допустимым. Visual Studio Code указывает на ошибки, отображая волнистые линии.

  6. Под только что добавленным шагом добавьте задачу для входа в среду 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 }}
    
  7. Под добавленным шагом добавьте еще один шаг для выполнения развертывания 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.

  8. Добавьте эти переменные и их значения в верхней части файла рабочего процесса между permissions: и jobs:

    name: deploy-toy-website
    
    on: [workflow_dispatch]
    
    permissions:
      id-token: write
      contents: read
    
    env:
        AZURE_RESOURCEGROUP_NAME: ToyWebsite
        ENVIRONMENT: nonprod
    
    jobs:
    
  9. Сохраните изменения в файле. Файл должен выглядеть следующим образом:

    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 }}
    
  10. В терминале Visual Studio Code выполните изменения, зафиксируйте их в репозиторий и отправьте их в Azure Repos:

    git add .
    git commit -m 'Add Azure CLI tasks to workflow'
    git push
    

Запуск рабочего процесса

Теперь вы готовы запустить рабочий процесс!

  1. В браузере откройте рабочий процесс, выбрав Действия>развертывания сайта игрушек.

  2. Выберите Запустить рабочий процесс>запустить рабочий процесс.

  3. Новый запуск рабочего процесса появится в списке запусков. Если он не отображается, обновите страницу браузера.

  4. Выберите выполняемый рабочий процесс, чтобы просмотреть сведения о выполнении.

    Дождитесь завершения выполнения.

  5. Выберите задание на развертывание .

    снимок экрана интерфейса GitHub с страницей запуска с выделенным заданием развертывания.

  6. Выберите Выполнить azure/arm-deploy@v1. Здесь отображаются сведения о задаче.

  7. Выберите Run azure/arm-deploy@v1 в описании задачи.

    скриншот интерфейса GitHub, показывающий журнал рабочего процесса с выделенными

    Обратите внимание, что на этом шаге используются переменные среды, добавленные в файл рабочего процесса.

  8. Проверьте остальные выходные данные рабочего процесса.

    Рабочий процесс отображает успешное развертывание системы.

Проверка развертывания

  1. Перейдите на портал Azure.

  2. В левом меню выберите пункт Группы ресурсов.

  3. Выберите ToyWebsite.

  4. В обзорпросмотрите состояние развертывания. Вы увидите, что одно развертывание выполнено успешно.

    снимок экрана портала Azure, на котором показана группа ресурсов с одним успешным развертыванием.

  5. Выберите ссылку 1 Успешно выполнено, чтобы просмотреть сведения о развертывании.

    снимок экрана портала Azure, на котором показана история развертывания группы ресурсов с выделенной задачей развертывания.

    Обратите внимание, что имя развертывания соответствует номеру выполнения рабочего процесса в GitHub Actions, так как для имени развертывания использовался переменная среды github.run_number.

  6. Чтобы узнать, какие ресурсы были развернуты, выберите развертывание. Чтобы развернуть развертывание и просмотреть дополнительные сведения, выберите сведения о развертывании. В этом случае есть учетная запись хранения, план службы приложений Azure и приложение.

    снимок экрана портала Azure, на котором показаны сведения о развертывании группы ресурсов с выделенными ресурсами службы приложений.