Упражнение. Создание конвейера 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. На странице Настройка выберите параметр Deploy to Azure Kubernetes Service.
  10. В области Развертывания в службе Azure Kubernetes выберите подписку Azure, а затем выберите Продолжить.
  11. При появлении запроса войдите в подписку Azure.
  12. Для кластера выберите кластер AKS, созданный в предыдущем уроке aks-eshop.
  13. Для пространства именоставьте Существующее, а затем выберите по умолчанию .
  14. Для реестра контейнероввыберите реестр контейнеров Azure, созданный на предыдущем уроке; например, acseshop186748394.
  15. В поле имя образавведите продукт или услугу.
  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. Давайте рассмотрим выходные данные запуска созданного конвейера.

Снимок экрана, показывающий состояние Azure Pipeline.

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

Снимок экрана этапа сборки в конвейере, который завершился сбоем.

На этапе сборки видно, что сборка завершилась сбоем. Выберите этап сборки и отправьте образ в реестр контейнеров 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.acr'
    
  3. Выберите Сохранить.

  4. В области Сохранить выберите Сохранить.

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

    Смотрите, как завершается этап сборки . Этап развертывания приостанавливается, пока вы не выберете его и не разрешите его запуск.

    Снимок экрана, показывающий завершенный конвейер.

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

    Снимок экрана: этап развертывания и успешно выполненные действия.