Упражнение. Публикация модуля в реестре
В вашей компании вы публикуете модули Bicep в реестре. Процесс публикации выполняется вручную с собственного компьютера. Теперь необходимо создать рабочий процесс для выполнения процесса публикации.
В этом упражнении вы выполните следующие действия.
- Создайте реестр контейнеров для модулей Bicep.
- Добавьте задание lint в рабочий процесс.
- Добавьте задание рабочего процесса для публикации модуля в реестре.
- Убедитесь, что рабочий процесс успешно запущен.
- Проверьте опубликованный модуль в реестре.
Создание реестра контейнеров
Перед публикацией модулей необходимо создать используемый реестр для организации. В данном случае реестр создается на портале Azure.
В браузере создайте реестр контейнеров на портале Azure.
На вкладке Основные сведения выберите целевую подписку и созданную ранее группу ресурсов ToyReusable.
Введите имя реестра и расположение, ближайшее к вам.
Внимание
Имя реестра должно быть уникальным в пределах Azure и содержать от 5 до 50 буквенно-цифровых символов. Флажок рядом с именем реестра указывает, что выбранное имя доступно.
Для плана ценообразования выберите "Базовый".
Оставьте значения по умолчанию для других параметров конфигурации.
Выберите Review + create (Просмотреть и создать).
Когда отобразится сообщение Проверка пройдена, выберите Создать.
Дождитесь завершения развертывания, которое обычно занимает 1–2 минуты.
Когда появится сообщение Развертывание выполнено успешно, выберите Перейти к ресурсу, чтобы открыть реестр контейнеров.
В области Обзор реестра контейнеров обратите внимание на значение параметра Сервер входа. Имя напоминает
yourregistryname.azurecr.io
.Это значение скоро вам потребуется.
Добавление файла метаданных модуля
В предыдущем уроке вы узнали о важности стратегии управления версиями для модулей. Вы также узнали, как использовать файлы метаданных модуля для указания основного и дополнительного номеров версии модуля в рабочем процессе. Здесь вы добавите файл метаданных для модуля учетной записи хранения.
В Visual Studio Code разверните папку modules/storage-account в корне репозитория.
Создайте файл с именем metadata.json.
Добавьте в этот файл приведенное ниже содержимое.
{ "version": { "major": 1, "minor": 2 } }
В файле метаданных отдельно определяются основные и незначительные номера версий. Каждый раз, когда рабочий процесс выполняется, рабочий процесс объединяет эти числа вместе с номером выполнения рабочего процесса, чтобы сформировать полный номер версии.
Сохраните внесенные в файл изменения.
Обновление определение рабочего процесса и добавление задания lint
Репозиторий содержит черновик рабочего процесса, который можно использовать в качестве отправной точки.
В Visual Studio Code разверните папку .github/workflows в корне репозитория.
Откройте файл module-storage-account.yml.
Обновите значение переменной
MODULE_REGISTRY_SERVER
среды до имени сервера реестра контейнеров. Вы скопировали это имя ранее в этом упражнении.Например, если сервер входа в реестр yourregistryname.azurecr.io, код выглядит следующим образом:
env: MODULE_NAME: storage-account MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io MODULE_FILE_PATH: modules/storage-account/main.bicep MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
В нижней части файла
# To be added
добавьте следующее определение задания lint:jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
Добавление задания publish в рабочий процесс
Теперь можно добавить второе задание для публикации модуля в реестре контейнеров.
В нижней части файла module-storage-account.yml добавьте первую часть определения задания публикации.
publish: runs-on: ubuntu-latest needs: [ lint ] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Первые два шага в этом определении — извлечь код из репозитория и войти в Azure.
Под добавленным кодом добавьте еще один шаг, который считывает номер версии из файла metadata.json модуля и задает его в качестве переменной среды.
- name: Get module version number run: | majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r ) versionNumber="$majorMinorVersionNumber.${{ github.run_number }}" echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
На шаге выполняется скрипт, использующий
jq
приложение командной строки для анализа JSON-файла.После созданного шага добавьте последний шаг для публикации модуля в реестр.
- uses: azure/cli@v1 name: Publish module with: inlineScript: | az bicep publish \ --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \ --file ${{ env.MODULE_FILE_PATH }}
Этот шаг создает значение аргумента
--target
динамически. Значение сервера реестра объединяется с именем модуля и номером версии.Сохраните внесенные в файл изменения.
Проверка и фиксация определения рабочего процесса
Убедитесь, что файл module-storage-account.yml выглядит следующим образом:
name: module-storage-account concurrency: module-storage-account on: workflow_dispatch: push: branches: - main paths: - 'modules/storage-account/**' permissions: id-token: write contents: read env: MODULE_NAME: storage-account MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io MODULE_FILE_PATH: modules/storage-account/main.bicep MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file ${{ env.MODULE_FILE_PATH }} publish: runs-on: ubuntu-latest needs: [ lint ] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Get module version number run: | majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r ) versionNumber="$majorMinorVersionNumber.${{ github.run_number }}" echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV - uses: azure/cli@v1 name: Publish module with: inlineScript: | az bicep publish \ --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \ --file ${{ env.MODULE_FILE_PATH }}
Если содержимое файла отличается, обновите его в соответствии с этим примером, а затем сохраните файл.
Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:
git add . git commit -m "Add lint and publish jobs to storage account module workflow" git push
Активация рабочего процесса
В браузере перейдите в репозиторий GitHub и откройте вкладку Действия.
Выберите рабочий процесс module-storage-account.
Обратите внимание, что рабочий процесс уже выполняется. Извещающий триггер сработал, так как вы изменили файл metadata.json в папке модуля.
Выберите последнее выполнение из списка.
Дождитесь завершения рабочего процесса. Модуль Bicep публикуется в реестре контейнеров.
Обратите внимание на номер выполнения рабочего процесса, который, вероятно, равен 3.
Проверка модуля в реестре
Вы также можете просмотреть опубликованный модуль на портале Azure.
В браузере перейдите на портал Azure.
Перейдите в группу ресурсов ToyReusable.
В разделе "Ресурсы" выберите созданный ранее реестр контейнеров.
Выберите репозитории служб>в меню. Затем выберите репозиторий modules\storage-account, который представляет модуль, опубликованный рабочим процессом.
Обратите внимание, что существует один тег, соответствующий номеру версии модуля, опубликованного рабочим процессом. Основная версия (1) и дополнительная версия (2) соответствуют номерам версий, определенным в файле metadata.json. Номер редакции (3) соответствует номеру выполнения рабочего процесса.
Очистка ресурсов
Теперь, когда вы завершили упражнение, можно удалить ресурсы, чтобы не оплачивать их.
В окне терминала Visual Studio Code выполните следующую команду:
az group delete --resource-group ToyReusable --yes --no-wait
Группа ресурсов удалится в фоновом режиме.
Remove-AzResourceGroup -Name ToyReusable -Force
Вы также можете удалить секреты и репозиторий GitHub, а также удостоверения рабочей нагрузки Azure.
Секреты в GitHub
- В репозитории GitHub перейдите к разделу "Параметры секретов>и переменных>Действия".
- Для каждого сохраненного секрета GitHub выберите значок "Удалить <имя> секрета" и следуйте инструкциям.
репозиторий GitHub
- Перейдите к разделу "Общие параметры>".
- Выберите "Удалить этот репозиторий " и следуйте инструкциям.
приложение Azure федеративные учетные данные регистрации и субъект-служба.
- На домашней странице портала найдите идентификатор Microsoft Entra и выберите его в списке служб.
- Перейдите к разделу "Управление> Регистрация приложений".
- На вкладке " Принадлежащие приложения " выберите toy-reusable.
- Нажмите кнопку "Удалить " и следуйте инструкциям.
- Перейдите на вкладку "Удаленные приложения ".
- Выберите toy-reusable, выберите "Удалить окончательно", а затем нажмите кнопку "Да ", чтобы окончательно удалить регистрацию приложения.
Внимание
Можно иметь повторяющиеся имена регистрации приложений и субъектов-служб. Рекомендуется проверить идентификатор приложения, чтобы убедиться, что вы удаляете правильный ресурс.