Упражнение. Создание конвейера Azure DevOps для развертывания облачного приложения
Ваш менеджер хочет, чтобы вы изменили CI/CD для компаний eShop, чтобы использовать Azure Pipelines. Теперь вы создадите конвейер Azure DevOps для создания и развертывания службы продуктов.
Создание конвейера Azure DevOps
Важно!
Прежде чем приступить к работе, вам потребуется учетная запись Azure DevOps. Если у вас нет, его можно создать бесплатно на dev.azure.com.
- Войдите в dev.azure.com.
- Выберите +Создать проект.
- В поле "Имя проекта" введите развертывание eShop.
- Оставьте значение "Видимость" закрытым, нажмите кнопку "Создать".
- В левой части экрана выберите "Конвейеры", а затем нажмите кнопку "Создать конвейер".
- На странице Подключение выберите GitHub в поле "Где находится код?".
- При появлении запроса войдите в GitHub и авторизации Azure Pipelines для доступа к учетной записи GitHub.
- Для выбора репозитория выберите вилку репозитория.
- На странице "Настройка" выберите параметр "Развернуть для Служба Azure Kubernetes".
- В области "Развертывание в Служба Azure Kubernetes" выберите подписку Azure, а затем нажмите кнопку "Продолжить".
- При появлении запроса войдите в подписку Azure.
- Для кластера выберите кластер AKS, созданный в предыдущем модуле aks-eshop.
- Для пространства имен оставьте выбранный вариант "Существующий", а затем выберите значение по умолчанию.
- В реестре контейнеров выберите Реестр контейнеров Azure, созданные в предыдущем уроке, например acseshop186748394.
- В поле "Имя образа" введите productservice.
- В поле "Порт службы" введите 8080.
- Выберите " Проверить и настроить".
Просмотр файла 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 конвейера нажмите кнопку "Сохранить и запустить". В области "Сохранить и запустить":
- Выберите "Создать ветвь" для этой фиксации.
- Оставьте все остальные параметры заданными по умолчанию.
- Выберите Сохранить и выполнить.
Мониторинг и устранение неполадок конвейера
Azure Pipelines отслеживаются и управляются с портала Azure DevOps. Давайте рассмотрим выходные данные запуска созданного конвейера.
На странице сводки показаны все этапы запущенного конвейера. Вы можете выбрать этап, чтобы просмотреть шаги более подробно. Через некоторое время вы увидите, что конвейер завершился сбоем. Выберите этап сборки.
На этапе сборки видно, что сборка завершилась сбоем. Выберите сборку и отправьте изображение на Реестр контейнеров Azure шаге. Ошибка в файле журнала показывает:
##[error]Unhandled: No Dockerfile matching /home/vsts/work/1/s/**/Dockerfile was found.
Исправление ошибки
В DevOps вернитесь на страницу сводки конвейера. Вы измените созданный конвейер, чтобы устранить ошибку.
В правом верхнем углу выберите меню "Дополнительные действия ", а затем выберите "Изменить конвейер".
Строка 17 файла YAML определяет используемый файл Dockerfile, и по умолчанию конвейер ожидает, что в корневом каталоге репозитория будет файл с именем Dockerfile .
EShop использует другой файл docker для службы продуктов с именем DockerfileProducts. Измените строку 17, чтобы:
dockerfilePath: '**/DockerfileProducts'
Выберите Сохранить.
В области "Сохранить" нажмите кнопку "Сохранить".
Выберите "Выполнить", а затем в области "Запуск конвейера" выберите "Выполнить".
Просмотрите завершенную стадию сборки. Этап развертывания приостанавливается, пока не выберете его и разрешите его запустить.
Конвейер успешно завершается. Выберите этап развертывания, чтобы просмотреть шаги.