Упражнение. Создание конвейера Azure DevOps для развертывания облачного приложения

Завершено

Ваш менеджер хочет, чтобы вы изменили CI/CD для компаний eShop, чтобы использовать Azure Pipelines. Теперь вы создадите конвейер Azure DevOps для создания и развертывания службы продуктов.

Создание конвейера Azure DevOps

Важно!

Прежде чем приступить к работе, вам потребуется учетная запись Azure DevOps. Если у вас нет, его можно создать бесплатно на dev.azure.com.

  1. Войдите в dev.azure.com.
  2. Выберите +Создать проект.
  3. В поле "Имя проекта" введите развертывание eShop.
  4. Оставьте значение "Видимость" закрытым, нажмите кнопку "Создать".
  5. В левой части экрана выберите "Конвейеры", а затем нажмите кнопку "Создать конвейер".
  6. На странице Подключение выберите GitHub в поле "Где находится код?".
  7. При появлении запроса войдите в GitHub и авторизации Azure Pipelines для доступа к учетной записи GitHub.
  8. Для выбора репозитория выберите вилку репозитория.
  9. На странице "Настройка" выберите параметр "Развернуть для Служба Azure Kubernetes".
  10. В области "Развертывание в Служба Azure Kubernetes" выберите подписку Azure, а затем нажмите кнопку "Продолжить".
  11. При появлении запроса войдите в подписку Azure.
  12. Для кластера выберите кластер AKS, созданный в предыдущем модуле aks-eshop.
  13. Для пространства имен оставьте выбранный вариант "Существующий", а затем выберите значение по умолчанию.
  14. В реестре контейнеров выберите Реестр контейнеров Azure, созданные в предыдущем уроке, например acseshop186748394.
  15. В поле "Имя образа" введите productservice.
  16. В поле "Порт службы" введите 8080.
  17. Выберите " Проверить и настроить".

Просмотр файла YAML конвейера

Azure Pipelines использует файлы YAML для определения шагов по сборке и развертыванию приложения. Файл YAML хранится в репозитории GitHub и был создан автоматически на основе предоставленных сведений.

Давайте рассмотрим ФАЙЛ YAML:

trigger:
- main

resources:
- repo: self

variables:

  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: '3bcbb23c-6fca-4ff0-8719-bfbdb64a89b1'
  imageRepository: 'productservice'
  containerRegistry: 'acseshop186748394.azurecr.io'
  dockerfilePath: '**/Dockerfile'
  tag: '$(Build.BuildId)'
  imagePullSecret: 'acseshop18674839414442d34-auth'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'


stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

    - upload: manifests
      artifact: manifests

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build

  jobs:
  - deployment: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    environment: 'PhilStollerymod9cloudnativeexercisecode-1959.default'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

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

Раздел переменных определяет переменные , используемые в конвейере. Переменные используются для определения Реестр контейнеров Azure и используемого файла Dockerfile.

Затем YAML определяет задание сборки, использующее агент ubuntu-latest. Задание использует задачу Docker для сборки и отправки образа в Реестр контейнеров Azure.

Последний этап — развертывание обновленной службы продуктов в AKS. Задание использует задачу KubernetesManifest для развертывания образа в AKS.

Запуск конвейера

В правом верхнем углу страницы YAML конвейера нажмите кнопку "Сохранить и запустить". В области "Сохранить и запустить":

  1. Выберите "Создать ветвь" для этой фиксации.
  2. Оставьте все остальные параметры заданными по умолчанию.
  3. Выберите Сохранить и выполнить.

Мониторинг и устранение неполадок конвейера

Azure Pipelines отслеживаются и управляются с портала Azure DevOps. Давайте рассмотрим выходные данные запуска созданного конвейера.

A screenshot showing the status of an Azure Pipeline.

На странице сводки показаны все этапы запущенного конвейера. Вы можете выбрать этап, чтобы просмотреть шаги более подробно. Через некоторое время вы увидите, что конвейер завершился сбоем. Выберите этап сборки.

A screenshot of the build stage in a pipeline that has failed.

На этапе сборки видно, что сборка завершилась сбоем. Выберите сборку и отправьте изображение на Реестр контейнеров Azure шаге. Ошибка в файле журнала показывает:

##[error]Unhandled: No Dockerfile matching  /home/vsts/work/1/s/**/Dockerfile  was found.

Исправление ошибки

В DevOps вернитесь на страницу сводки конвейера. Вы измените созданный конвейер, чтобы устранить ошибку.

  1. В правом верхнем углу выберите меню "Дополнительные действия ", а затем выберите "Изменить конвейер".

  2. Строка 17 файла YAML определяет используемый файл Dockerfile, и по умолчанию конвейер ожидает, что в корневом каталоге репозитория будет файл с именем Dockerfile .

    EShop использует другой файл docker для службы продуктов с именем DockerfileProducts. Измените строку 17, чтобы:

      dockerfilePath: '**/DockerfileProducts'
    
  3. Выберите Сохранить.

  4. В области "Сохранить" нажмите кнопку "Сохранить".

  5. Выберите "Выполнить", а затем в области "Запуск конвейера" выберите "Выполнить".

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

    A screenshot showing the completed pipeline.

    Конвейер успешно завершается. Выберите этап развертывания, чтобы просмотреть шаги.

    A screenshot showing the Deploy stage and the successfully completed steps.