Упражнение. Создание конвейера 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.
- Для выбора репозитория, выберите форк репозитория.
- На странице Настройка выберите параметр Deploy to Azure Kubernetes Service.
- В области Развертывания в службе Azure Kubernetes выберите подписку Azure, а затем выберите Продолжить.
- При появлении запроса войдите в подписку Azure.
- Для кластера выберите кластер AKS, созданный в предыдущем уроке aks-eshop.
- Для пространства именоставьте Существующее, а затем выберите по умолчанию .
- Для реестра контейнероввыберите реестр контейнеров Azure, созданный на предыдущем уроке; например, acseshop186748394.
- В поле имя образавведите продукт или услугу.
- Для порта службывведите 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.acr'
Выберите Сохранить.
В области Сохранить выберите Сохранить.
Выберите Выполнить, а затем на панели Запуск конвейера выберите Выполнить.
Смотрите, как завершается этап сборки . Этап развертывания приостанавливается, пока вы не выберете его и не разрешите его запуск.
Конвейерный процесс завершается успешно. Выберите стадию развертывания , чтобы просмотреть шаги.