Упражнение. Публикация модуля в реестре

Завершено

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

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

  • Создайте реестр контейнеров для модулей Bicep.
  • Добавьте этап lint в конвейер.
  • Добавьте этап конвейера для публикации модуля в реестре.
  • Убедитесь, что конвейер успешно запущен.
  • Проверьте опубликованный модуль в реестре.

Создание реестра контейнеров

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

  1. В браузере создайте новый реестр контейнеров на портале Azure.

  2. На вкладке "Основы" выберите целевую подписку и группу ресурсов ToyReusable, созданную ранее.

  3. Введите имя для вашего реестра и местоположение, ближайшее к вам.

    Важный

    Имя реестра должно быть уникальным в Azure и содержать 5–50 буквенно-цифровых символов. Флажок рядом с именем реестра указывает, что выбранное имя доступно.

  4. Для SKU выберите Базовый.

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

  5. Выберите Проверка + Создать.

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

  6. Просмотрите параметры, показывающие, проверка пройдена, а затем выберите Создать.

    Дождитесь завершения развертывания, которое обычно занимает 1–2 минуты.

  7. Когда отобразится сообщение об успешном развертывании, выберите Перейти к ресурсу, чтобы открыть реестр контейнеров.

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

  8. В области Обзор реестра контейнеров обратите внимание на значение настройки сервера входа. Это будет что-то вроде yourregistryname.azurecr.io.

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

    Это значение потребуется в ближайшее время.

Добавление файла метаданных модуля

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

  1. В Visual Studio Code разверните папку modules/storage-account, находящуюся в корне вашего репозитория.

  2. Создайте файл с именем metadata.json.

    снимок экрана Visual Studio Code, указывающий на расположение файла метаданных JSON.

  3. Добавьте в файл следующее содержимое:

    {
      "version": {
        "major": 1,
        "minor": 2
      }
    }
    

    Обратите внимание, что в файле метаданных отдельно определяются основные и незначительные номера версий. Конвейер объединяет эти числа вместе с номером сборки конвейера в полный номер версии при каждом запуске конвейера.

  4. Сохраните изменения в файле.

Обновите определение конвейера и добавьте этап lint

Репозиторий содержит черновик конвейера, который можно использовать в качестве отправной точки.

  1. Откройте файл pipeline.yml в папке modules/storage-account.

  2. Измените значение переменной среды ModuleRegistryServer на имя сервера реестра контейнеров. Вы скопировали это имя ранее в этом упражнении.

    Например, если сервер входа в реестр yourregistryname.azurecr.io, он будет выглядеть следующим образом:

    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    
  3. В конце файла для комментария # 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
    

Добавьте этап публикации в ваш конвейер

Теперь можно добавить второй этап для публикации модуля в реестр контейнеров.

  1. В нижней части файла 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-файла.

  2. Под созданным шагом добавьте шаг для публикации модуля в реестр.

    - 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 динамически. Он объединяет значение сервера реестра, имя модуля и номер версии.

  3. Сохраните изменения в файле.

Проверьте и подтвердите конфигурацию конвейера

  1. Убедитесь, что файл 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)
    

    Если это не так, обновите его в соответствии с этим примером, а затем сохраните его.

  2. Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:

    git add .
    git commit -m "Add lint and publish stages to storage account module pipeline"
    git push
    

    Сразу после отправки Azure Pipelines запускает новый запуск конвейера.

Мониторинг конвейера

  1. В браузере выберите Pipelines>Pipelines.

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

  3. Отображается запуск конвейера.

    Дождитесь завершения выполнения конвейера. Модуль Bicep публикуется в вашем реестре контейнеров.

  4. Обратите внимание на номер сборки конвейера, который включает в себя сегодняшнюю дату и уникальный номер версии.

Проверка модуля в реестре

Вы также можете просмотреть опубликованный модуль на портале Azure.

  1. В своем браузере откройте портал Azure.

  2. Перейдите в группу ресурсов ToyReusable.

  3. Выберите созданный ранее реестр контейнеров.

  4. В меню выберите репозитории. Затем выберите модули\учетные записи хранения репозиторий, представляющий модуль, опубликованный конвейером.

    снимок экрана портала Azure, на котором показан модуль Bicep в реестре контейнеров.

    Обратите внимание, что существует одиночный тег , который соответствует номеру версии модуля, опубликованного вашим конвейером. Основная версия (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.

  • Подключение к службе

    1. В проекте Azure DevOps выберите параметры проекта >подключения службы.
    2. Выберите ToyReusable.
    3. В правом верхнем углу выберите три точки для Дополнительные действия.
    4. Выберите Удалить и подтвердите удаление.
  • Регистрация приложений Azure

    1. На домашней странице портала найдите Microsoft Entra ID и выберите его в списке служб .
    2. Перейдите к разделу Управление регистрацией приложений>.
    3. В Удаленные приложения выберите игрушка-повторное использование.
    4. Выберите Удалить безвозвратно и следуйте инструкциям.
  • Проект Azure DevOps

    1. В проекте Azure DevOps выберите Настройки проекта >Обзор.
    2. Из опции удалить проект выберите Удалить.
    3. Введите имя проекта и подтвердите удаление.