Упражнение. Развертывание шаблонов ARM в рамках усилий CI/CD с помощью GitHub Actions
Здесь вы развертываете шаблон Azure Resource Manager (ARM) из рабочего процесса GitHub Actions.
Важно
Это упражнение выполняется за пределами среды Microsoft Learn. Это упражнение требует наличия собственной подписки Azure и может взиматься плата. Это требуется, поскольку вам нужно создать учетную запись службы, которая не поддерживается в подписке песочницы. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись прежде чем начать.
Создание учетной записи и репозитория GitHub
Во-первых, если у вас нет учетной записи GitHub, создайте ее на странице создания учетной записи GitHub. (Это бесплатно.)
После того, как вы создали учетную запись, войдите и создайте новый репозиторий, в котором можно сохранить шаблоны как часть модели 'инфраструктура как код' (IaC). Чтобы создать репозиторий (обычно известный как репозиторий в отрасли), выполните следующие действия.
В правом верхнем углу любой страницы на сайте GitHub используйте раскрывающееся меню + и выберите Новый репозиторий. Или нажмите зеленую кнопку Создать репозиторий, если она доступна.
Введите короткое запоминающееся имя репозитория. Например, используйте deploy-ARM-Template. При необходимости добавьте описание репозитория. Например, используйте развертывание первого шаблона ARM с помощью GitHub Actions.
Выберите параметр видимости репозитория. Общедоступные репозитории доступны всем пользователям в Интернете. Частные репозитории доступны только вам и пользователям, которым вы явно предоставляете доступ. Оба подходят для этого упражнения.
В разделе Инициализация этого репозитория с помощьювыберите Добавить файл README.
Выберите Создать репозиторий.
Вы создали репозиторий и инициализировали его с помощью ФАЙЛА README. Пора зафиксировать шаблон и файл параметров шаблона в репозитории.
Заметка
Файлы README — это отличное место для подробного описания проекта или добавления некоторых документов, таких как установка или использование проекта. Содержимое файла README автоматически отображается на первой странице репозитория.
Фиксация файла шаблона ARM в репозитории
На сайте GitHub перейдите на главную страницу репозитория.
Над списком файлов в раскрывающемся списке Добавить файл выберите Создать файл.
В поле имени файла введите имя и расширение шаблона. В нашем упражнении используйте имя 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" } } ] } } ] }
Добавьте описание в раздел Фиксация нового файла и выберите Зафиксировать новый файл, чтобы сохранить его в репозитории.
Настройка проверки подлинности между 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, чтобы открыть оболочку в нижней части страницы.
В оболочке используйте приведенный выше код для создания субъекта-службы. Вы получите следующие результаты. Скопируйте часть результатов JSON (содержимое в красном поле на следующем снимке экрана), так как это необходимо при настройке секрета в GitHub.
Скопируйте JSON-данные и сохраните их в качестве секретов GitHub в вашем репозитории на GitHub, выполнив следующие действия: В вашем репозитории на GitHub выберите вкладку Параметры. В меню слева выберите раскрывающееся меню Секреты, а затем выберите Codespaces.
Введите следующие значения, а затем выберите Добавить секрет:
- Имя: Введите AZURE_CREDENTIALS.
- секрет: вставьте выходные данные JSON, скопированные ранее.
Вам требуется эта информация для установки параметров аутентификации в рабочем процессе.
Создание рабочего процесса
Файл рабочего процесса должен храниться в папке github/workflows в корне репозитория. Расширение файла рабочего процесса может быть либо .yml, либо yaml.
Вы можете создать файл рабочего процесса, а затем отправить или загрузить файл в репозиторий. Или можно использовать следующую процедуру для его создания в интерфейсе GitHub:
В репозитории GitHub выберите Действия в верхнем меню и выберите Настроить рабочий процесс самостоятельно.
Переименуйте файл рабочего процесса, если вы предпочитаете другое имя вместо main.yml. Например, используйте deployARMTemplate.yml.
Замените содержимое файла .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
. Это задание состоит из трех шагов.- Ознакомьтесь с исходным кодом.
- Войдите в Azure.
- Разверните шаблон ARM.
Важно
Убедитесь, что имя секрета в выражении
creds: ${{ secrets.AZURE_CREDENTIALS }}
соответствует имени секрета, сохраненного в параметрах репозитория. Кроме того, убедитесь, что имя шаблона ARM в шагеDeploy ARM Template
template: $GITHUB_WORKSPACE/azuredeploy.json
совпадает с именем, сохраненным в репозитории ранее.Заметка
Имя группы ресурсов должно быть
GitHubActionExercise-rg
, если вы использовали предыдущий код Azure CLI при настройке учетных данных развертывания. Созданное имя группы ресурсов — это имя проекта с добавленнымrg
.Выберите начать коммит. При необходимости добавьте комментарий и описание.
Убедитесь, что выбран Коммит непосредственно в основной ветке, а затем выберите Коммит нового файла (или Коммит изменений).
После создания и фиксации файла рабочего процесса в главной ветви репозитория рабочий процесс начнется автоматически, так как триггер в рабочем процессе является фиксацией или отправкой в основную ветвь.
on: push: branches: - main
Перейдите в репозиторий и проверьте состояние рабочего процесса.
Проверьте ваше развертывание
После завершения рабочего процесса перейдите на портал Azure, чтобы проверить состояние развертывания.
В левой области выберите группы ресурсов >GitHubActionExercise-rg. На панели развертывания убедитесь, что развертывание выполнено успешно.