Упражнение. Публикация модуля в реестре
В вашей компании игрушек вы публикуете модули Bicep в реестр. Вы запускали процесс публикации вручную со своего компьютера. Теперь необходимо создать конвейер для обработки процесса публикации.
В этом упражнении вы узнаете:
- Создайте реестр контейнеров для модулей Bicep.
- Добавьте этап lint в конвейер.
- Добавьте этап конвейера для публикации модуля в реестре.
- Убедитесь, что конвейер успешно запущен.
- Проверьте опубликованный модуль в реестре.
Создание реестра контейнеров
Прежде чем публиковать модули, необходимо создать реестр для вашей организации. Здесь вы используете портал Azure для создания реестра.
В браузере создайте новый реестр контейнеров на портале Azure.
На вкладке "Основы" выберите целевую подписку и группу ресурсов ToyReusable, созданную ранее.
Введите имя для вашего реестра и местоположение, ближайшее к вам.
Важный
Имя реестра должно быть уникальным в Azure и содержать 5–50 буквенно-цифровых символов. Флажок рядом с именем реестра указывает, что выбранное имя доступно.
Для SKU выберите Базовый.
Оставьте значения по умолчанию для других параметров конфигурации.
Выберите Проверка + Создать.
Просмотрите параметры, показывающие, проверка пройдена, а затем выберите Создать.
Дождитесь завершения развертывания, которое обычно занимает 1–2 минуты.
Когда отобразится сообщение об успешном развертывании, выберите Перейти к ресурсу, чтобы открыть реестр контейнеров.
В области Обзор реестра контейнеров обратите внимание на значение настройки сервера входа. Это будет что-то вроде yourregistryname.azurecr.io.
Это значение потребуется в ближайшее время.
Добавление файла метаданных модуля
В предыдущем уроке вы узнали о важности стратегии управления версиями для модулей. Вы также узнали, как использовать файлы метаданных модуля для указания основного и дополнительного номера версии модуля в конвейере. Здесь вы добавите файл метаданных для модуля учетной записи хранения.
В Visual Studio Code разверните папку modules/storage-account, находящуюся в корне вашего репозитория.
Создайте файл с именем metadata.json.
Добавьте в файл следующее содержимое:
{ "version": { "major": 1, "minor": 2 } }
Обратите внимание, что в файле метаданных отдельно определяются основные и незначительные номера версий. Конвейер объединяет эти числа вместе с номером сборки конвейера в полный номер версии при каждом запуске конвейера.
Сохраните изменения в файле.
Обновите определение конвейера и добавьте этап lint
Репозиторий содержит черновик конвейера, который можно использовать в качестве отправной точки.
Откройте файл pipeline.yml в папке modules/storage-account.
Измените значение переменной среды
ModuleRegistryServer
на имя сервера реестра контейнеров. Вы скопировали это имя ранее в этом упражнении.Например, если сервер входа в реестр yourregistryname.azurecr.io, он будет выглядеть следующим образом:
- name: ModuleRegistryServer value: yourregistryname.azurecr.io
В конце файла для комментария
# To be added
со следующим определением этапа линт:stages: - stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file $(ModuleFilePath) name: LintBicepCode displayName: Run Bicep linter
Добавьте этап публикации в ваш конвейер
Теперь можно добавить второй этап для публикации модуля в реестр контейнеров.
В нижней части файла pipeline.yml определите этап Publish и добавьте шаг для чтения номера версии из файла metadata.json модуля, чтобы установить его в качестве переменной системы конвейера.
- stage: Publish jobs: - job: Publish steps: - script: | majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r ) versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)" echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber" name: GetModuleVersionNumber displayName: Get module version number
На шаге выполняется скрипт, использующий приложение командной строки jq для анализа JSON-файла.
Под созданным шагом добавьте шаг для публикации модуля в реестр.
- task: AzureCLI@2 name: Publish displayName: Publish module inputs: azureSubscription: $(ServiceConnectionName) scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az bicep publish \ --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \ --file $(ModuleFilePath)
Обратите внимание, что этот шаг создает значение аргумента
--target
динамически. Он объединяет значение сервера реестра, имя модуля и номер версии.Сохраните изменения в файле.
Проверьте и подтвердите конфигурацию конвейера
Убедитесь, что файл storage_account_module.yml выглядит следующим образом:
trigger: batch: true branches: include: - main paths: include: - 'modules/storage-account/**' variables: - name: ServiceConnectionName value: ToyReusable - name: ModuleName value: storage-account - name: ModuleRegistryServer value: yourregistryname.azurecr.io - name: ModuleFilePath value: modules/storage-account/main.bicep - name: ModuleMetadataFilePath value: modules/storage-account/metadata.json pool: vmImage: ubuntu-latest stages: - stage: Lint jobs: - job: LintCode displayName: Lint code steps: - script: | az bicep build --file $(ModuleFilePath) name: LintBicepCode displayName: Run Bicep linter - stage: Publish jobs: - job: Publish steps: - script: | majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r ) versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)" echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber" name: GetModuleVersionNumber displayName: Get module version number - task: AzureCLI@2 name: Publish displayName: Publish module inputs: azureSubscription: $(ServiceConnectionName) scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az bicep publish \ --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \ --file $(ModuleFilePath)
Если это не так, обновите его в соответствии с этим примером, а затем сохраните его.
Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:
git add . git commit -m "Add lint and publish stages to storage account module pipeline" git push
Сразу после отправки Azure Pipelines запускает новый запуск конвейера.
Мониторинг конвейера
В браузере выберите Pipelines>Pipelines.
Выберите активный запуск конвейера.
Отображается запуск конвейера.
Дождитесь завершения выполнения конвейера. Модуль Bicep публикуется в вашем реестре контейнеров.
Обратите внимание на номер сборки конвейера, который включает в себя сегодняшнюю дату и уникальный номер версии.
Проверка модуля в реестре
Вы также можете просмотреть опубликованный модуль на портале Azure.
В своем браузере откройте портал Azure.
Перейдите в группу ресурсов ToyReusable.
Выберите созданный ранее реестр контейнеров.
В меню выберите репозитории. Затем выберите модули\учетные записи хранения репозиторий, представляющий модуль, опубликованный конвейером.
Обратите внимание, что существует одиночный тег , который соответствует номеру версии модуля, опубликованного вашим конвейером. Основная версия (1) и дополнительная версия (2) соответствуют номерам версий, определенным в файле metadata.json. Номер редакции (20230407.3) соответствует номеру сборки конвейера.
Очистка ресурсов
Теперь, когда вы выполнили упражнение, вы можете удалить ресурсы, чтобы вам не выставляли счета за них.
В терминале Visual Studio Code выполните следующую команду:
az group delete --resource-group ToyReusable --yes --no-wait
Группа ресурсов удаляется в фоновом режиме.
Remove-AzResourceGroup -Name ToyReusable -Force
Вы также можете удалить подключение к службе и проект Azure DevOps.
Подключение к службе
- В проекте Azure DevOps выберите параметры проекта >подключения службы.
- Выберите ToyReusable.
- В правом верхнем углу выберите три точки для Дополнительные действия.
- Выберите Удалить и подтвердите удаление.
Регистрация приложений Azure
- На домашней странице портала найдите Microsoft Entra ID и выберите его в списке служб .
- Перейдите к разделу Управление регистрацией приложений>.
- В Удаленные приложения выберите игрушка-повторное использование.
- Выберите Удалить безвозвратно и следуйте инструкциям.
Проект Azure DevOps
- В проекте Azure DevOps выберите Настройки проекта >Обзор.
- Из опции удалить проект выберите Удалить.
- Введите имя проекта и подтвердите удаление.