В этом видео YouTube я покажу вам, как использовать сервис Azure Pobelines для создания и развертывания контейнеров в сервис приложения. Вы также увидите, как установить, как настроить CI/CI/CD CI/CD в Azure в Azure Pipelines и как использовать файл Docker на своем этапе сборки для создания изображений контейнера, а затем нажимайте эти изображения в реестр Azure Container (ACR).
Вы можете получить исходный код с этого пошагового учебника из Организации Guitkills GitHub: ASP.NET DEMO приложение с конфигурацией трубопровода YAML CI/CD
Полная стенограмма:
Майк Пфефер: Поэтому, если вы просто попадаете в мир DEVOPS в первый раз, вы, вероятно, пытаетесь выяснить трубопроводы CI/CD, а также, возможно, контейнеры, создающие контейнерные изображения и развертывающие их. И если вы этого не сделали раньше, это может быть вроде спутано. Так что в этом видео я собираюсь показать вам, как создавать контейнерные изображения и развернуть их через лазурный трубопровод.
Майк Пфефер: Эй, что все готово. Это Mike Pfeiffer, Microsoft Azure MVP и множество облачных навыков FM-подкасты. Это видео в основном пошаговое обучение. Это от нашего класса Azure DevOps в CloudShills.io, наш курс EZ 400. И на этом шаге за шагом руки в лаборатории я покажу вам, как настроить проект Azure DEVOPS, как принять справочное приложение, которое имеет не только код приложения, также имеет инфраструктурный код, принять этот репозиторий, положить его в Azure Devops. А потом я прогуливаю постройку конвейера CI/CD, который будет создать изображение контейнера, используя файл Docker и репозиторий, а затем в конечном итоге развертывающую, что служба Azure App. Я думаю, что вам действительно нравится этот, особенно если вы новичок. Такие вещи, такие как Azure DEVOPS и работают с контейнерами. Так что давайте пойдем вперед и начнем.
Майк Пфефер: На этом первом этапе лаборатории я хотел показать вам приложение, которое мы собираемся использовать. И я также хотел напомнить вам о ссылке схемы YAML в документировании DEVOPS AZURE. И когда вы прокрутите здесь, главное, что я хотел напомнить вам о том, что это иерархия трубопровода YAML. Теперь, очевидно, вы собираетесь иметь весь код для этого, но я понимаю, что глядя на весь трубопровод YAML, немного запуган. Так что просто помните, что мы собираемся сделать, у нас будет один документы YAML. У нас будет этапы для различных этапов этого трубопровода. Таким образом, у нас будет первый этап для сборки и испытаний. Так что строительство и тестирование самого приложения. И тогда у нас будет второй этап. Этот этап собирается выпустить приложение в промежуточную среду. И мы собираемся сохранить это просто, мы не собираемся делать несколько рабочих мест на каждом этапе.
Mike Pfeiffer: мы просто будем иметь одну работу на каждом этапе. И каждый из этих рабочих мест будет иметь разные шаги, которые должны иметь место по пути. И это ничего нового из того, что мы видели в прошлом. Я просто хочу напомнить вам, что эта иерархия очень простой, но это очень легко запутаться этим, когда вы смотрите на готовый документ YAML. Итак, позвольте мне перейти на Visual Studio Code и покажите вам это приложение. Таким образом, у нас есть две вещи в этом репо, когда вы собираетесь импортировать это в свой проект. Так что есть сама приложение. Это решение Visual Studio. У этого есть три проекта в этом. Мы собираемся использовать саму фактическое приложение, веб-приложение ASP Net Core. И тогда здесь есть проект по тестированию единиц. Таким образом, в этой папке шаблонов руки у нас есть шаблон здесь, чтобы создать веб-приложение в Azure App Service.
Майк Пфефер: И тогда есть также шаблон, который мы разверним ресурс реестра контейнера. Таким образом, прохладная вещь об этой реализации состоит в том, что трубопровод собирается создать для нас инфраструктуру, если она не существует, используя шаблоны руки. И это будет делать это как часть строительного трубопровода. Так что это общая основная структура проекта для этого приложения. Пойдем на следующее видео, и мы начнем копать в документ Azure Pipelines YAML.
Mike Pfeiffer: давайте пойдем вперед и сломаем файл YAML трубопровода, который мы собираемся использовать для создания CIC-трубопровода. Итак, наряду с этим примерным приложением, у вас будет документ Azure Pobullines YAML. Позвольте мне идти вперед и переместить это слева здесь. И это будет очень простая реализация, просто пара этапов. Как мы видели в прошлом, у нас будет постоянная интеграция.
Майк Пфефер: Таким образом, любые изменения в главной ветви репозитория собираются вызвать трубопровод. И так как обычно, у нас здесь несколько переменных. У меня есть вариабельность конфигурации сборки, и я использовал переменную местоположения. Я собираюсь использовать это в разных местах на протяжении обоих этапов, чтобы указать заданиям, где я хочу развернуть мои ресурсы. Так что есть переменная для местоположения для региона, которую мы собираемся использовать. Существует переменная для имени хоста ACR. Таким образом, имя хоста реестра реестра Azure контейнера и, очевидно, вы собираетесь использовать уникальные значения здесь. Так как вы в основном импортируете этот репо, я покажу вам, как это сделать позже, но вы хотите изменить эти части информации. Таким образом, это все имена DNS в конце дня, по большей части. Поэтому я просто собираюсь изменить эти ценности.
Mike Pfeiffer: Мы скажем, это пятая версия этого, которую я здесь реализую. И вы можете использовать все, что вы хотите, пока он соответствует имени хоста DNS. Так что ваш ACR FQDN будет указан здесь. Просто имя хоста будет установлено в этой переменной. Название вашей группы ресурсов будет включено. Что бы вы ни захотите назвать Docker Image, который собирается сохранить в реестре контейнера, а затем, наконец, название веб-приложения приложения приложения. Помните, что помните, что просто как любая среда программирования, мы не хотим жесткого кода каких-либо значений, если мы можем помочь ему. И особенно, мы не хотим повторять себя. Таким образом, вы увидите в этом документе YAML, который мы используем эти значения несколько раз, но тогда также не сложно кодировать его в конфигурации, — это хорошая практика, и это дает нам больше возможностей, которые будут настраивать вещи.
Майк Пфефер: Поэтому после определения переменных мы объявили наши этапы. И снова мы просто будем иметь два этапа. И вы можете в основном видеть здесь, что мы ссылались на первый этап, придавая ему имя под названием здание тестов. Обратите внимание, что я также использую комментарии по пути. И свойства для этой сцены сборки и тестирования, у нас будет одна работа. Работа будет называться сборкой и тестами. И тогда мы начинаем в основном настроить все вещи, на которых мы смотрели на протяжении всей этой программы. Таким образом, в размещенном бассейне мы собираемся использовать виртуальную машину, запущенную UBUNTU 1604, поскольку это веб-приложение Dotnet Core, это перекрестная платформа. Таким образом, мы можем сделать процесс сборки и тестирования на Linux. И для этой работы у нас есть коллекция шагов. Прямо по индикатору шагов здесь вы можете увидеть, что у нас есть наша первая задача. Таким образом, эта первая задача на самом деле собирается развернуть нашу инфраструктуру для нас.
Майк Пфефер: Это задача развертывания группы ресурсов Azure, которую мы используем для запуска шаблонов руки. Таким образом, внутри нашего проекта мы будем ожидать обслуживания. Так что это будет то, что мне нужно будет создать. Вы увидите меня сделать это позже. Здесь вы можете увидеть, что мы ссылаемся на имя группы ресурсов на основе переменной. Он включен в верхней части документа YAML. То же самое о местоположении, а затем файл, который мы собираемся использовать, чтобы сделать развертывание. Итак, сам фактический шаблон рук. Таким образом, на этом этапе здания мы создаем ресурс реестра контейнера. Это должно произойти довольно быстро. И если это уже существует, он в основном будет быстрое обновление, потому что мы делаем инкрементное развертывание здесь по умолчанию. И обратите внимание на этот вход здесь для этого параметра переопределения задач. Таким образом, это входные параметры, которые мы фактически использовали из командной строки, если мы выполняем развертывание шаблона руки.
Майк Пфефер: И вот что вы заметите здесь, вместо использования файла параметров, в основном частью системы шаблона ARM, мы просто кормясь в значениях параметров. И вот мы используем переменные в лазурных трубопроводах. Таким образом, мы можем принять переменные, которые находятся в верхней части этого документа в ссылке их внутри этого значения параметров переопределения здесь. И то, что я хотел указать, это то, что иногда, когда вы используете переменные, которые имеют место, как местоположение, как оно имеет западное пространство, пространство США в цене, и вы ссылаетесь на то, что где-то еще нравится прямо здесь, Мы знаем, что из прошлого, этот синтаксис макроса ссылки на величину переменного можно сделать с помощью знака доллара и открытыми и закрывающими скобки с именем переменной внутри него. Но если эта ценность будет в конечном итоге вернуть строку, которая имеет в нем пробелы, вроде в этом случае West Space, США-пространство два, вы хотите заключить, что в двойных кадинатах, как вы видите здесь.
Майк Пфефер: И так, что первая задача будет позаботиться о развертывании шаблона руки. Вторая задача просто собирается сделать восстановление dotnet, как мы видели в прошлом. Таким образом, команда выполнить восстановление Dotnet, мы собираемся потом сделать сборку Dotnet, а затем мы собираемся запустить наши модульные тесты. Итак, опять же, мы просто используем задачу Dotnet Core CLI здесь, чтобы сделать все эти вещи. После того, как мы выполним эти тесты подразделения, мы опубликуем файлы проекта. Мы спустимся здесь, мы будем использовать задачу Docker, чтобы создать изображение контейнера. Таким образом, это просто будет как на рабочем столе, на вашей машине и терминал, запущенном Docker Build. Обратите внимание, что мы собираемся ссылаться на реестр контейнера, который мы получили перечисленные в наших переменных. И тогда мы собираемся определить имя изображения, которое мы собираемся использовать для этого изображения контейнера.
Майк Пфефер: Итак, здесь мы используем нашу собственную пользовательскую переменную, называемую именем изображения. А затем для тега мы используем переменную из лазурных трубопроводов, которая является Build.Build ID. Таким образом, каждый раз, когда бежит сборки, этот идентификатор сборки будет другим, и это даст нам возможность постепенно версию каждое изображение для контейнера Docker. Оттуда мы будем использовать задачу Docker, чтобы продолжать и нажать на это изображение в реестр контейнера. Таким образом, команда для этого называется нажимайте изображение. И снова мы собираемся ссылаться на то же имя изображения с тем же тегом изображения, в основном идентификатор сборки. И последние две задачи в этом этапе сборки и теста должны копировать файлы. Таким образом, шаблоны руки в построенный каталог артефакт, потому что мы собираемся сделать развертывание шаблона руки на стадии выпуска, чтобы развернуть инфраструктуру веб-приложения.
Майк Пфефер: А потом, наконец, после того, как этот материал скопирован в каталог постановки артефакта, мы просто собираемся опубликовать эти артефакты вывода сборки в приложении под названием App. Так что это сборка и тестирует часть этого трубопровода YAML. Пойдем на следующее видео, и мы посмотрим на релиз постановки. Это на самом деле собирается развернуть наше приложение и получить все и запустить.
Майк Пфефер: Хорошо. Так что теперь, когда мы понимаем сборку и тестируйте на сцену здесь, в этом трубопроводе YAML, давайте прокручиваем весь путь до нижней части на второй этап. И мы просто поговорим здесь об этом этапе выпуска. Итак, что мы собираемся сделать здесь снова, мы просто собираемся указать одну работу. Это будет рабочее решение. Опять же, мы собираемся использовать Ubuntu Server из размещенного пула. А затем с точки зрения наших шагов, это будет очень просто.
Майк Пфефер: Итак, мы видели это в прошлом. Помните, что мы не будем проверять репо в этом процессе выпуска, потому что нет необходимости делать это. Мы собираемся получить доступ к артефактам с этапа сборки, чтобы мы могли фактически загрузить эти артефакты для вывода сборки, чтобы мы могли ссылаться на них здесь. А потом, наконец, когда вы попадаете до последней пары задач, номер один, мы собираемся снова, используйте задачу развертывания группы ресурсов Azure для запуска шаблона руки. И, как вы можете видеть, мы устанавливаем имя группы ресурсов через переменную, местоположение. А потом, наконец, путь к саму шаблоны руки перечислено здесь. Имейте в виду, что, когда вы работаете с задачами на выпускном трубопроводе, подобном этому или на этапе выпуска, вы можете ссылаться на трубопровод. WorkSpace здесь, используя эту систему, которая доступна для нас, чтобы добраться до ваших артефактов по сборке.
Майк Пфефер: Поэтому мы скопировали шаблоны руки в этой последней паре задач на этапе сборки и теста. Это в конечном итоге поставит тех в результате выходных артефактов. Мы можем добраться до них, ссылаясь на эту переменную здесь. Наконец, эта задача также имеет несколько параметров переопределения. Таким образом, нет файла параметров с этим шаблоном руки, а затем мы просто указываем здесь входы. Наконец, последняя задача на этапе релиза вот мы просто собираемся сделать развертывание веб-приложения Azure RM. Мы собираемся развернуть службу приложений. Поэтому мы видели эту задачу в предыдущей лаборатории, но на этот раз мы делаем что-то немного другое. Мы развертываем контейнер докера. Таким образом, входы просто немного отличаются. Таким образом, мы собираемся установить сервисное соединение. В этом случае тип приложения станет средой службы приложений Linux.
Майк Пфефер: И тогда, когда речь идет о том, чтобы указать, что веб-имя это является частью нашей переменной декларации в верхней части этого документа, у нас есть наш собственность пространства имен докера, который будет установлен на сам имя хоста ACR. Репозиторий Docker — это репозиторий изображения, который мы создали, когда мы нажимаем на наше изображение в средах ACR. И, наконец, наш момент докера изображения. Теперь прохладная вещь с этой задачей, которую вы можете найти полезными, есть ли свойство URI Web App. Таким образом, вы можете создать переменную, которая будет доступна внутри трубопровода после создания веб-приложения. Таким образом, эта задача собирается создать веб-приложение. И как только это завершено, мы можем заполнить переменную URL URL-адреса веб-приложения с URL-адресом приложению. Таким образом, вы могли бы получить последующую задачу после этого, выйдите и, возможно, выполните тестирование на этот URL, выполните некоторые тестирование пользовательского интерфейса, некоторые тестирования производительности, такие вещи, как это.
Майк Пфефер: Так что все, что нам нужно, чтобы посмотреть на этот трубопровод YAML. Пойдем на следующий шаг в этой лаборатории, и я покажу вам, как настроить проект и получить настройку этого приложения и идет.
Mike Pfeiffer: Итак, обратно в портал Azure DevOps, давайте пойдем и создаем новый проект здесь. Я собираюсь позвонить в эту службу приложения Docker. Итак, мы создадим этот проект. И то, что мы собираемся сделать, это импортировать репозиторий из Организации GitHub навыков облачных навыков. Итак на Github.com/Cloudskills, здесь есть этот проект, ASP Net Core Demo, или на самом деле это Net Core Docker Docker. И вы можете видеть, что это те же файлы, о которых я просто говорил здесь. Итак, давайте пойдем вперед и возьми URL-адрес клона для этого и внутри проекта, мы пойдем, чтобы успокоить, прокрутить вниз до импорта, а затем мы собираемся импортировать этот репозиторий.
Mike Pfeiffer: И теперь, когда импорт успешен, давайте перейдем к настройкам проекта на левой стороне, и мы прокрутим вниз. Перейдем на сервисные соединения, и мы создадим новое обслуживание для этого приложения и этот проект. Поэтому мы собираемся выбрать менеджер ресурсов здесь и нажмите Далее И мы сделаем автоматический принцип услуг. Я просто собираюсь схватить это на всей уровне подписки здесь. И мы назовем этот Azure SC для подключения службы Azure. А с этим сервисным подключением конфигурируйтесь, давайте вернемся к конфигурации проекта, мы пойдем, чтобы успокоиться. Вот весь наш код, и все выглядит хорошо. И так давайте пойдем вперед и настроим трубопровод. Мы нажмем на настройку сборки, а затем мы прокручиваем здесь, и мы скажем, что мы собираемся выбрать существующий файл azure yaml внутри этого хранилища. Таким образом, мы выберем документы Azure Publines YAML, нажмите «Продолжить».
Майк Пфефер: И здесь вы можете видеть, что у нас есть весь код, который я указывал в прошлый раз. Так что обратите внимание, помните, вы захотите заменить значения для этого. Поэтому, если вы импортируете это, вы можете перейти, чтобы восстановить. Вы можете конечно клонировать и загрузить его на свою машину, но вы также можете просто прийти сюда и редактировать его. И Джо, вы просто хотите убедиться, что вы используете уникальные значения здесь. Поэтому я изменим это на веб-приложение CS Docker 006. Я совершу те изменения в главную ветку. И когда мы смотрим в Repose, я могу настроить мою сборку, выбрав существующий Azure YAML-трубопровод.
Майк Пфефер: А потом, что это было обновлено, все выглядит хорошо, давайте пойдем вперед и запустим этот трубопровод. Так что здесь вы можете видеть, что мы создали тест и постановку. И это очень похоже на лабораторию, которую мы посмотрели на последнюю неделю этой программы. Единственное отличие в том, что этот процесс сборки сначала собирается создать совершенно новый ресурс для нас. Он собирается создать экземпляр контейнеров реестра, который у меня сейчас нет, а затем построит инфраструктуру, которая мне нужна для приложений. Итак, давайте отдам эту вещь секунду, чтобы бежать, и мы посмотрим, что произойдет.
Майк Pfeiffer: Хорошо, так что это было чуть менее 10 минут, как этап сборки, так и тестирования, а этап выпуска выполнена. Таким образом, у нас есть новая приложение и менее 10 минут с нуля. Перейти к порталу Azure, вот группа ресурсов. И вот мой план обслуживания приложений, мое веб-приложение, приложение Insights Resource, реестр контейнера. Давайте перейдем в саму веб-приложение. И тогда давайте отправимся на URL для этого приложения. Таким образом, мы можем увидеть сообщение успеха. Эта вещь работает отлично, и это работает внутри контейнера внутри приложений.
Майк Пфефер: Поэтому, как последний шаг к этой лаборатории, давайте перейдем к следующему видео. И тогда посмотрим, как мы можем обновить это приложение. В качестве последнего шага, чтобы проверить это, давайте изменим приложение, чтобы убедиться, что это выступает с трубопровода и действительно обновляет наше приложение. Так что это не должно делать ничего для нашей существующей инфраструктуры. Таким образом, у нас сейчас есть эта инфраструктура, но давайте посмотрим на обновление приложения, наблюдая за выполнением трубопровода и обновляя эту инфраструктуру с новым изображением контейнера. Итак, давайте перейдем к отдыху здесь, мы перейдем к папке приложения.
Mike Pfeiffer: Мы перейдем к этому первому проекту, Aspnetcore, Dotnet Core, а затем внутри страницы, мы перейдем на страницу индекса, а затем мы редактируем это. И так на домашней странице, где обычно он говорит успех, мы обновим это, чтобы сказать «успех». Вы развернули через Azure DEVOPS. И так давайте пойдем вперед и посвятим этому перемен на главный филиал, который будет вызвать наш трубопровод. И тогда мы можем отслеживать, что, идя на трубопроводы здесь слева и давайте позволим этому запуску. И как только это завершено, я покажу вам, что произошло в группе ресурсов.
Mike Pfeiffer: Хорошо, вы можете увидеть несколько минут спустя, все выглядит хорошо. Создание и тестовое и промежуточное развертывание завершено. Давайте перейдем к порталу Azure и в группе ресурсов, давайте сначала проверим веб-приложение. Итак, мы пойдем в приложение. Мы пойдем на URL. Отлично. Итак, как мы видим здесь, сообщение успеха на странице. Все выглядит хорошо. Давайте закрытимся из этого. И тогда давайте вернемся в ресурсную группу. Пойдем на ресурс реестра контейнера. А потом вот на левой стороне, если мы отправимся в репозитории, и мы смотрим на этот репозиторий, мы видим, что у нас есть два разных версиях контейнерных изображений. Тот, который там для сборки 145 и тот, который там для сборки 146. Это самый последний, который мы просто развернули в приложении.
Майк Пфефер: Так что это приносит нам до конца этой руки на лаборатории. Я надеюсь, что вам понравилось. И я увижу тебя в следующем.
Оригинал: «https://dev.to/cloudskills/how-to-build-and-deploy-docker-containers-with-azure-pipelines-a0l»