Упражнение. Развертывание шаблонов ARM в рамках усилий CI/CD с помощью GitHub Actions

Завершено

Здесь вы развертываете шаблон Azure Resource Manager (ARM) из рабочего процесса GitHub Actions.

Важно

Это упражнение выполняется за пределами среды Microsoft Learn. Это упражнение требует наличия собственной подписки Azure и может взиматься плата. Это требуется, поскольку вам нужно создать учетную запись службы, которая не поддерживается в подписке песочницы. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись прежде чем начать.

Создание учетной записи и репозитория GitHub

Во-первых, если у вас нет учетной записи GitHub, создайте ее на странице создания учетной записи GitHub. (Это бесплатно.)

снимок экрана, на котором показана страница создания учетной записи GitHub.

После того, как вы создали учетную запись, войдите и создайте новый репозиторий, в котором можно сохранить шаблоны как часть модели 'инфраструктура как код' (IaC). Чтобы создать репозиторий (обычно известный как репозиторий в отрасли), выполните следующие действия.

  1. В правом верхнем углу любой страницы на сайте GitHub используйте раскрывающееся меню + и выберите Новый репозиторий. Или нажмите зеленую кнопку Создать репозиторий, если она доступна.

    снимок экрана, показывающий выбор для создания репозитория GitHub.

  2. Введите короткое запоминающееся имя репозитория. Например, используйте deploy-ARM-Template. При необходимости добавьте описание репозитория. Например, используйте развертывание первого шаблона ARM с помощью GitHub Actions.

  3. Выберите параметр видимости репозитория. Общедоступные репозитории доступны всем пользователям в Интернете. Частные репозитории доступны только вам и пользователям, которым вы явно предоставляете доступ. Оба подходят для этого упражнения.

  4. В разделе Инициализация этого репозитория с помощьювыберите Добавить файл README.

  5. Выберите Создать репозиторий.

    снимок экрана, показывающий создание новых сведений о репозитории.

Вы создали репозиторий и инициализировали его с помощью ФАЙЛА README. Пора зафиксировать шаблон и файл параметров шаблона в репозитории.

Заметка

Файлы README — это отличное место для подробного описания проекта или добавления некоторых документов, таких как установка или использование проекта. Содержимое файла README автоматически отображается на первой странице репозитория.

Фиксация файла шаблона ARM в репозитории

  1. На сайте GitHub перейдите на главную страницу репозитория.

  2. Над списком файлов в раскрывающемся списке Добавить файл выберите Создать файл.

    снимок экрана, показывающий выбор для добавления шаблона в репозиторий.

  3. В поле имени файла введите имя и расширение шаблона. В нашем упражнении используйте имя azuredeploy.json. Скопируйте и вставьте следующий шаблон в новый файл GitHub.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "VnetName": {
                "type": "string",
                "defaultValue": "VNet-001",
                "metadata": {
                    "description": "Virtual Network Name"
                }
            },
            "CostCenterIO": {
                "type": "string",
                "defaultValue": "12345",
                "metadata": {
                    "description": "Cost Center IO number for cross billing"
                }
            },
            "OwnerName": {
                "type": "string",
                "defaultValue": "John Smith",
                "metadata": {
                    "description": "Name of the stakeholder responsible for this resource"
                }
            }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  4. Добавьте описание в раздел Фиксация нового файла и выберите Зафиксировать новый файл, чтобы сохранить его в репозитории.

    снимок экрана, показывающий сохранение нового шаблона в репозитории.

Настройка проверки подлинности между GitHub Actions и подпиской Azure

Чтобы развернуть любые ресурсы в Azure с помощью GitHub Actions, необходимо создать сервисный принципал Azure и дать ему права на создание ресурсов, определенных в ваших шаблонах. Вы выполните этот шаг в разделе Azure Cloud Shell на портале Azure после входа в подписку.

Создание субъекта-службы

Для развертывания ресурсов Azure в качестве принципала рабочего процесса GitHub Actions требуется правильная встроенная роль участника.

В следующем скрипте Azure CLI показано, каким образом можно создать учетную запись службы Azure с разрешениями участника в группе ресурсов Azure. Эта группа ресурсов позволяет рабочему процессу развертывать ресурсы, определенные в шаблоне ARM.

projectName="GitHubActionExercise"
location="eastus"
resourceGroupName="${projectName}-rg"
appName="http://${projectName}"

# Create the resource group
az group create --name $resourceGroupName --location $location

# Store the resource group ID in a variable
scope=$(az group list --query "[?contains(name, '$resourceGroupName')].id" -o tsv)

# Create the service principal with contributor rights to the resource group we just created
az ad sp create-for-rbac --name $appName --role Contributor --scopes $scope --sdk-auth

На портале при входе в подписку выберите значок Cloud Shell, чтобы открыть оболочку в нижней части страницы.

Анимация, показывающая открытие Cloud Shell.

В оболочке используйте приведенный выше код для создания субъекта-службы. Вы получите следующие результаты. Скопируйте часть результатов JSON (содержимое в красном поле на следующем снимке экрана), так как это необходимо при настройке секрета в GitHub.

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

Скопируйте JSON-данные и сохраните их в качестве секретов GitHub в вашем репозитории на GitHub, выполнив следующие действия: В вашем репозитории на GitHub выберите вкладку Параметры. В меню слева выберите раскрывающееся меню Секреты, а затем выберите Codespaces.

Введите следующие значения, а затем выберите Добавить секрет:

  • Имя: Введите AZURE_CREDENTIALS.
  • секрет: вставьте выходные данные JSON, скопированные ранее.

снимок экрана, показывающий добавление новых сведений о ключе учетной записи службы в секрет GitHub.

Вам требуется эта информация для установки параметров аутентификации в рабочем процессе.

Создание рабочего процесса

Файл рабочего процесса должен храниться в папке github/workflows в корне репозитория. Расширение файла рабочего процесса может быть либо .yml, либо yaml.

Вы можете создать файл рабочего процесса, а затем отправить или загрузить файл в репозиторий. Или можно использовать следующую процедуру для его создания в интерфейсе GitHub:

  1. В репозитории GitHub выберите Действия в верхнем меню и выберите Настроить рабочий процесс самостоятельно.

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

  2. Переименуйте файл рабочего процесса, если вы предпочитаете другое имя вместо main.yml. Например, используйте deployARMTemplate.yml.

  3. Замените содержимое файла .yml следующим кодом.

    Заметка

    В GitHub Marketplace есть некоторые настраиваемые действия, которые можно использовать для развертывания шаблонов ARM. В этом модуле используется поставщик Marketplace с именем Развернуть шаблон Azure Resource Manager (ARM).

    name: Deploy ARM Template
    
    on:
      push:
        branches:
          - main
    env:
      AZURE_SUBSCRIPTION_ID: << Subscription Id >>   # set this to your Azure Subscription Id
      AZURE_RESOURCE_GROUP: GitHubActionExercise-rg   # set this to your target resource group
    
    jobs:
      deploy-virtual-network-template:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout source code
            uses: actions/checkout@main
    
          - name: Login to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Deploy ARM Template
            uses: azure/arm-deploy@v1
            with:
              scope: resourcegroup
              subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }}
              resourceGroupName: ${{ env.AZURE_RESOURCE_GROUP }}
              template: ./azuredeploy.json
    

    Файл рабочего процесса содержит три раздела.

    • name: имя рабочего процесса.

    • on: имя события GitHub, которое активирует рабочий процесс. Рабочий процесс активируется, когда событие push-отправки находится в главной ветви и изменяет по крайней мере один файл в главной ветви.

    • jobs. Выполнение рабочего процесса состоит из одного или нескольких заданий. Только одно задание носит название deploy-virtual-network-template. Это задание состоит из трех шагов.

      1. Ознакомьтесь с исходным кодом.
      2. Войдите в Azure.
      3. Разверните шаблон ARM.

    Важно

    Убедитесь, что имя секрета в выражении creds: ${{ secrets.AZURE_CREDENTIALS }} соответствует имени секрета, сохраненного в параметрах репозитория. Кроме того, убедитесь, что имя шаблона ARM в шаге Deploy ARM Templatetemplate: $GITHUB_WORKSPACE/azuredeploy.json совпадает с именем, сохраненным в репозитории ранее.

    Заметка

    Имя группы ресурсов должно быть GitHubActionExercise-rg, если вы использовали предыдущий код Azure CLI при настройке учетных данных развертывания. Созданное имя группы ресурсов — это имя проекта с добавленным rg.

  4. Выберите начать коммит. При необходимости добавьте комментарий и описание.

  5. Убедитесь, что выбран Коммит непосредственно в основной ветке, а затем выберите Коммит нового файла (или Коммит изменений).

    снимок экрана, показывающий фиксацию рабочего процесса в главной ветви.

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

    on:
      push:
        branches:
          - main
    
  6. Перейдите в репозиторий и проверьте состояние рабочего процесса.

    снимок экрана, показывающий состояние рабочего процесса.

Проверьте ваше развертывание

После завершения рабочего процесса перейдите на портал Azure, чтобы проверить состояние развертывания.

В левой области выберите группы ресурсов >GitHubActionExercise-rg. На панели развертывания убедитесь, что развертывание выполнено успешно.

снимок экрана, показывающий состояние развертывания.