Рубрики
Uncategorized

Afacicd, как босс — приложения для функций Azure Ci/ CD трубопроводы с Azure DevOps 🚀 ⚡

Привет всем, спасибо, что присоединились к этой статье о создании непрерывной интеграции и … Tagged с DevOps, Node, Serverless, Azure.

Всем привет,

Спасибо за то, что присоединились к этой статье о создании непрерывной интеграции и непрерывного развертывания для приложений Function Function с использованием Azure DevOps. Мы сделаем это сегодня немного дискуссии о том, чтобы взять его с конца до конца, создавая все, что необходимо с нуля. Мы увидим, что такое приложения Function Function, как мы можем начать с этого и где мы используем это с теми маленькими нюансами, которые мы, возможно, пропустили здесь и там.

Предварительные условия

Прежде чем мы начнем, как всегда мы хотим знать, каков минимум для нас, чтобы быть в состоянии начать, быть эффективными и продуктивными.

  1. Visual Studio Code
  2. Node.js
  3. Git bash
  4. Azure Account
  5. Azure DevOps Account
  6. Azure Functions App
  7. Инструменты Azure Extension Vscode

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

Пролог

Я хотел бы предоставить с простым и кратким описанием того, какова наша цель. Мы не собираемся писать какой -то надежный кусок кода, который заново переигрывает колесо, а скорее будем создавать и использовать службу без сервера, предоставляемая Microsoft Azure Cloud Platform. Я хочу рассказать вам о причине, по которой нам действительно нужно иногда использовать эту способность вместо того, чтобы писать наш собственный веб -API Node.js или любую другую веб -структуру, такие как .NET или Python и т. Д.

Как вы можете понять, приложения функций Azure — это Серверный реализация, которую Azure предоставляет нам. Если вы знаете Firebase Cloud Functions или AWS Lambda или любая другая подобная служба, он служит той же цели. Конечно, мы также должны помнить, что существуют различные типы и шаблоны для функций Azure, и мы собираемся реализовать один, работающий на node.js, и это будет вызвано вызовами HTTP. Я знаю, о чем ты сейчас думаешь .. Это звучит точно так же, как связаться с конечной точкой API, но с одним важным отличием, и мы не пишем весь API, но мы пишем только кусок кода для одной конкретной конечной точки!

Серверные способности предоставляют нам выбор встать и выполнять задачи, которые могут быть рекурсивными в течение некоторого периода времени, например, обращение к удаленному/стороннему API, чтобы получить данные и записать их в нашу базу данных, или, возможно, нам нужно запустить логику Когда определенные события запускаются, возможно, используя очередь сообщений или хранилище файлов. Независимо от причины, есть целая услуга, посвященная таким видам задач, и мы должны знать, как заставить их поговорить друг с другом. Большое преимущество, используя без сервера, заключается в том, что в конечном итоге оно может экономить нам немного денег, и на самом деле это считается лучшей практикой! Это происходит по нескольким причинам, и я замечу мою. Прежде всего, без серверных функций отключены до тех пор, пока они не будут запускаются, существуют пары типов триггеров, как упомянуто выше. Во -вторых, из -за причины, по которой вам не нужно писать весь API, у вас осталось достаточно времени для работы над другими задачами. Вы сосредоточены на конкретной бизнес -логике и вам нужно только реализовать ее и беспокоиться о чем -либо еще. Таким образом, вы прогрессируете быстрее и выполняете большую работу за тот же период времени. В -третьих, вам необходимо понять, что Serverless Service — это управляемый сервис, предоставляемый облачным провайдером, и его управление ресурсами для масштаба и эластичности являются автоматическими, и ни одна из ваших забот. Azure на самом деле позволяет вам использовать вычислительную питание для работы без сервера для бесплатных выполнений для 1 миллиона выполнений, прежде чем вы начнете платить за фактическую вычислительную мощность, и даже тогда она очень низкая. Вы можете прочитать больше в приложениях Function Azure Цены раздел. Из всех, и это мое последнее замечание, что функции Serveless могут поддерживать множество языков программирования (основной один раз в этот момент), и вам не нужно беспокоиться о пропуске этой щедрой услуги.

Теперь, когда мы ушли с нашего пути, давайте перейдем к делу и сделаем что -то, потому что все, что мы делали до сих пор, это поговорим (или читаем на самом деле).

Сделать теорию стать реальностью

Люди, которые знают меня как программиста, знают, что я не человек с графическим интерфейсом, и мне нравится кодировать свой путь к цели, но, поскольку это что -то вроде учебного пособия, и я предполагаю, что некоторые из вас не знакомы со всеми этими услугами в Azure, мы Затем будет использовать графический интерфейс, чтобы создать то, что нам нужно. В будущем, когда у меня будет больше свободного времени и не так занят работой, мы увидим некоторые продвинутые вещи, которые происходят в лазуре, и там нет графического интерфейса, мальчиков и девочек.

Мы начнем с создания Azure Function App с шаблоном Node.js с использованием языка программирования JavaScript. Затем мы осматриваем, из чего состоит шаблон, и объясняем некоторые нюансы. Как только мы уберем это с дороги, мы перейдем к Azure DevOps и сделаем то, что нужно там, и делаем это на сегодня.

Давайте откроем VSCODE и установим расширение с именем инструментов Azure, если вы еще этого не сделали. Я предоставил ссылку на нее выше. Вам может потребоваться войти в свою учетную запись Azure, чтобы получить доступные ресурсы для вас. Затем мы нажимаем на значок на боковой панели и находим раздел функций.

Если мы будем зависнуть на Функции Ряд мы получим меню. Мы хотим выбрать Создать функцию Вариант, символ молнии.

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

Мы создадим папку на рабочем столе или где -либо еще, что вы хотите И тогда мы выберем язык программирования, здесь мы хотим выбрать JavaScript.

Следующий шаг — выбрать тип функции, и здесь мы хотим выбрать HTTP Trigger . Есть много типов функций, и мы выберем тот, который соответствует требованию.

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

Следующий шаг — выбрать уровень авторизации, это означает, кто или что может получить доступ к этой функции. У нас есть 3 варианта, и мы хотим выбрать Аноним Анкет Это означает, что любой, что угодно, где угодно, что может говорить на HTTP, может получить доступ к функции, чтобы иметь возможность запустить ее. Как только вы получите его, вы решите права доступа для ваших функций. На самом деле, мы хотим видеть и реализовать для общего варианта использования, и только после того, как мы будем опытны в инструменте, мы сможем реализовать для конкретных вариантов использования.

Теперь это последний шаг, который мы должны сообщить VSCODE, что мы хотим открыть проект в текущем окне, чтобы мы могли быть корнем содержащей папки.

Поздравляю! Ваша первая функция лазурности. Вы можете видеть, что шаблон дал нам образец кода, который возвращает текстовое сообщение. Ничего фантастического. Никому не волнует. Что теперь ? Итак, как я уже говорил ранее, мы хотим осмотреть шаблон, который мы получили, нам нужно понять структуру папок, нам нужно понять различные файлы конфигура Анкет

Как вы можете видеть на изображении, корневая папка на самом деле является проектом, который мы открыли в процессе создания функции. Он содержит файлы и папки. Папки, которые мы видим, представляют собой настройки VSCODE для самого проекта функций Azure для локальной разработки, а сама функция, названная по мере того, как мы выбрали в процессе создания функций.

Давайте осмотрим файлы, которые у нас есть в корневой папке. Первый файл, который мы осматриваем, — это host.json , он содержит конфигурации для этого конкретного проекта Azure Function и содержит 3 параметры конфигурации или более. Этот файл содержит глобальные конфигурации, которые влияют на все функции, которые являются его частью. Первый — это версия времени выполнения функций Azure, доступной для нас для использования, и это 2. Второй вариант на самом деле также версия, но есть разница, потому что эта версия указывает на пакет расширения функции, в основном, время выполнения языка программирования, с которой вы решили работать, и библиотеку, используемой для нее. В JavaScript фактически было крупное обновление, которое не так давно мигрировало с V2 на V3. Третий вариант — журнал, а Azure предоставляет нам встроенный инструмент с именем приложений. Мы можем выбрать его, если мы хотим использовать его, по моему честному мнению, вы должны, даже если вы используете другой собственный инструмент. Второй файл, который мы осматриваем, — это local.settings.json , он содержит минимальные конфигурации, чтобы позволить вам в качестве разработчика, запустить и проверять ваш функциональный код локально в вашей среде, как если бы они работали в облаке. Вам необходимо будет предоставить значения для учетной записи хранения, который использует этот проект, чтобы сохранить развернутую версию кода и время выполнения, которое вы нацеливаете. Вы также должны предоставить локальный проект, который вы запускаете на своем компьютере, значение для трафика, будьте его или нет.

Этот файл, кстати, игнорируется GIT, когда вы совершаете конфиденциальные данные, которые вам не заинтересованы в мире.

Третий файл Proxies.json Мы не будем говорить об этом сегодня, так как сегодня для нашего обсуждения это немного продвинутая функция. Я объясню, какие прокси и в будущем, что не сегодня, мы увидим их в действии. Таким образом, прокси — это в основном инструмент для определения маршрутов или конечных точек в вашем проекте приложения функций, которые реализованы третьим ресурсом (возможно, еще одно приложение функции, которое из вашей ответственности). Это позволяет вам представить архитектуру микросервисов под капотом, одновременно выявляя один единый и унифицированный API для потребителей. Есть, в дополнение к тому, что мы упомянули, еще 2 основные функции для прокси, и это способность изменять запросы и ответы API, а также версию вашего открытого API. Звучит очень интересно и оставляет нас заинтригованными для предстоящего.

Мы закончили с файлами, и теперь давайте осмотреть папки. В нашем недавно созданном проекте мы можем увидеть 2 папки. Один из названий. Если вы используете VSCODE, как и я, то вы можете увидеть папку .VSCODE. Мы проигнорируем его, потому что он содержит конфигурацию для VSCODE для поддержки приложения Function в нашей локальной среде разработки. Он создается, когда вы создаете проект из расширения инструментов Vscode Azure, как мы на самом деле это делали ранее. Эта папка сразу же поставляется с 3 файлами, и нас интересует только index.js Файл, как это файл, который будет держать наш фактический код. function.json Файл содержит конфигурации, влияющие только на эту конкретную функцию. Если вы вспомните глобальный файл конфигураций host.json, этот прибор файлов является только функцией, и это так. Этот файл довольно самостоятельно, и мы его игнорируем.

Функция глубокого погружения

Я хотел бы поближе познакомиться с полученным нами шаблоном кода. Вы можете увидеть в первой строке кода The Expression Module.exports, в node.js, когда мы хотим экспортировать по умолчанию, мы используем его. Здесь функция экспортируется как асинхронная, подвергающаяся 2 аргументам, контексту и запросу. Запрос содержит данные, которые мы получаем от клиентского потребителя функции, и контекст содержит информацию о вызове функции. Поскольку это управляемый сервис в Azure, функция работает в собственном процессе, и мы используем объект контекста для передачи информации в функции и выхода. Если вы когда -либо использовали веб -структуру Node.js под названием KOA, то это, вероятно, самое то же самое.

В нашем примере мы реализуем функцию, которую ее триггер является вызовом HTTP. Такие методы, как http get или http post, являются способом потребления этой функции. Нам осталось написать код только для нашего варианта использования. Одна важная вещь, которую мы всегда должны помнить, когда писать функции, заключается в том, что они ограничены в своей жизни. Функция может жить только в течение 15 секунд или 15000 миллисекунд. Так что бы вы ни реализовали, убедитесь, что это не затрагивает. Теперь, прежде чем мы перейдем к следующей части, если вы увидите в файле function.json , вы можете видеть, что разрешенные методы HTTP являются Get и Post. Мы оставим это для тестирования позже.

Как CI/CD

После того, как мы создали проект и функцию, мы можем использовать инструменты Azure Extension VSCODE для его развертывания, мы создаем основу для CI/CD, который мы хотим реализовать. Давайте продолжим и развертываем функцию и продолжаем для следующей части.

Вернувшись в расширение инструментов Azure, мы будем зависать на вершине Функции и нажмите на Развернуть кнопка. Мы выберем нашу подписку. Тогда мы выберем Создать приложение New Function в Azure Advanced Mode . Мы предоставим имя, которое мы хотим. Затем мы выбираем node.js. node.js. Теперь мы выбираем OS Linux. После этого мы хотим выбрать ресурсную группу, частью которой мы хотим, чтобы этот проект был частью. Важное примечание: если у вас уже нет ресурсной группы, не создайте ее здесь с инструментом, а входите в портал Azure и сделайте это там, это очень просто. Из моего опыта всегда что -то не так с созданием функции и ресурсной группы за один раз. Затем мы выбираем место рядом с нами, чтобы развернуть функцию, я выберу Западную Европу. Теперь нам нужно выбрать план, здесь мы продолжаем Потребление , который в основном является бесплатным уровнем, а затем платите по мере того, как вы идете, как только вы переходите на первое место, но знайте, что, когда вам нужно будет реализовать некоторые серьезные вещи с приложением Azure Functions, тогда план потребления — это не тот, который вы хотите выбрать. Мы поговорим об этом в будущем, так как это не в этом дискуссии. Следующим в очереди находится учетная запись хранения для приложения функций, и вы можете создать его на Fly, если у вас еще нет, и существует та, которую вы хотите использовать. Далее — Insights Azure Application, и мы пропустим его сейчас, мы будем включать его с портала позже.

Как правило, мы не хотим делать это таким образом только потому, что мы не единственные, кому может потребоваться работать над этой функцией, и мы хотим, чтобы копия была сохранена на случай, если с нашим компьютером произойдет что -то плохое, но для начального шага это неизбежно или мы могли бы сделать это с портала Azure, что бы вы ни находили проще.

Прежде чем мы сделаем все, что нам нужно, чтобы сохранить изменения в нашем проекте функций. Вернувшись в VSCODE Убедитесь, что мы находимся на главной ветви.

Мы хотим все зафиксировать. Внутри терминала мы будем выполнять git add. и следующая команда git commit -m «Первый коммит» Анкет Мы не можем подтолкнуть его куда угодно, потому что у нас еще нет репозитория в этом проекте. Здесь мы все думаем о репозиториях GitHub, и мы на самом деле собираемся использовать Azure Repos для этого, так что давайте пойдем туда (ссылка, предоставленная выше). Если у вас нет учетной записи Azure DevOps, то это время для его создания, в противном случае давайте откроем новый репозиторий. Существует основная причина для того, чтобы вы имели набор учетных записей Azure DevOps, и это возможность автоматически подключить проект приложения функций к центру развертывания. Есть возможность добавить его позже вручную, но это может быть немного утомительным, поэтому обратите внимание, пожалуйста.

Мы нажмите на кнопку Новый проект расположен в верхнем правом углу.

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

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

Поскольку это чистый репозиторий, у нас здесь есть 2 параметра, чтобы добавить код, либо мы клонируем репо и начинаем все с нуля, либо мы можем добавить существующий проект, мы выберем позже.

Найдите 2 команды под Нажмите существующий репозиторий из командной строки заглавие. Мы скопируем команды один за другим и вернемся к нашему терминалу VSCODE и выполним их.

После того, как вы закончите быстрое обновление страницы, покажет вам код.

Когда мы создали репозиторий и загрузили наш проект на него, мы теперь готовы продолжить и создать конвейер, который будет реализовать наш CI/CD. Наличие кода здесь мало что сделает, независимо от того, кто над ним работает. Первое, что мы сделаем сейчас, это создать конвейер, который в конечном итоге создаст комплекс развертывания для нашей функции. Этот конвейер должен быть автоматически запускаться, когда мы проводим новую версию кода. Сейчас мы будем работать с главной филиалом, но когда вы подведете его на следующий уровень, во что бы то ни стало, создать еще пару ветвей с триггерами и трубопроводами для них.

Найдите Трубопроводы Опция под меню слева и нажмите. Как только вы увидите экран трубопроводов, нажмите Создать трубопровод Кнопка в нижней правой стороне.

На экране перед нами найдите в самомниме ссылка Используйте классический редактор и нажмите на него.

Теперь нам нужно выбрать источник нашего кода, и это Azure Repos git Анкет Мы убедимся, что проект репо — это тот, который мы хотим, и филиал, на который мы хотим нацелиться. Наконец нажмите Продолжить Анкет

Следующий шаг — выбрать шаблон. По сути, мы могли бы выполнить пустую работу и добавить соответствующие задачи вручную, но, к счастью, Azure был достаточно находчивым, чтобы думать заранее и создать шаблон только для этого варианта использования (спасибо, ребята!). В поле поиска ищите фразу Функциональный узел и выберите Применить На элементе в результатах с именем Функции Azure для node.js

Как только мы находимся в разделе задачи трубопровода, мы сможем увидеть все задачи, предоставленные шаблоном. Здесь ничего не нужно касаться, но нам нужно внести изменения в Построить трубопровод Измените Спецификации агента к Ubuntu-20.04 Анкет Если вы помните, когда мы развернули функцию, мы установили ОС в Linux, нам нужно иметь такую же среду для трубопровода, что и наше время выполнения.

Далее мы находим Триггеры Вкладка вверху и выберите Включить непрерывную интеграцию и Партии изменяются, пока строится сборка Анкет Это означает, что каждый раз, когда мы выдвигаем новый код в главную ветвь, этот трубопровод будет запускаться. Наконец нажмите Сохранить и очередь Анкет

В всплывающем окне проверьте все настройки и нажмите Сохранить и запустить Анкет

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

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

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

Как только мы находимся на экране конвейера выпуска, первое, что нам нужно сделать, это принести артефакт сборки сгенерированного конвейера сборки. С левой стороны есть шаг под названием Артефакты , найдите его и нажмите Добавить Анкет Вы увидите, что с правой стороны есть всплывающее окно, и мы хотим выбрать там артефакт. Поскольку мы не изменили название конвейера сборки, вы должны иметь то же имя, что и мое, которое было сгенерировано шаблоном. После выбора щелчка Добавить кнопка внизу.

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

Теперь мы перейдем к Этапы Раздел в правой части экрана, и мы нажмите на 1 работа, 1 задание Ссылка на пустой сцене у нас уже есть Этап 1 Анкет

На этом этапе нам нужно будет предоставить наш Azure Подписка , Тип приложения который Функциональное приложение на Linux и название функции Azure, которую мы развернули ранее вручную.

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

Эпилог

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

module.exports = async function (context, req) {

    context.res = {
        body: "This is the change we made to the original function so we could test our ci/cd!"
    };

}

Как видите, ничего необычайно. Теперь мы будем использовать GIT, чтобы совершить это изменение в главной ветви. Убедитесь, что перед вами открыто окно DevOps Azure, чтобы мы могли увидеть запуск трубопровода сборки и конвейер выпуска. Хорошо, теперь вернемся в VSCODE, откройте клемму и выполните следующие команды:

  • git add.
  • git commit -m «первое изменение для тестирования CICD»
  • git push

Через секунду или два вы должны увидеть магию. Если вы хотите проверить его, чтобы увидеть, что он работает, как и ожидалось, это очень просто. Давайте откроем портал Azure и поишем фразу Функциональное приложение в базе поиска. Мы обнаруживаем проект, который мы создали ранее, и в левой стороне меню найти и нажимаем Функции вариант. Теперь мы выберем из списка название нашей функции и перейдем к ее выделенному экрану. В меню слева от левой стороны местонахождение Обзор и выберите это. В середине экрана должна быть кнопка с надписью Получить функцию URL Анкет Скопируйте URL на новую вкладку и посмотрите, что вы получите, или вы можете использовать почтальон для этого. Надеемся, что развертывание было сделано, и вы увидите обновленную версию кода.

И последнее, прежде чем мы закончим на сегодня. Мы хотели установить информацию о приложении Azure, которые мы пропустили во время развертывания функционального приложения. Я хотел показать вам один ручный шаг в процессе создания функционального приложения и выбрал более легкую из них. Если вы вернетесь к Функциональное приложение Страница на портале и выберите проект, который мы создали, в меню с левой стороны Посмотрите на Постижение приложения под Настройки Анкет Нажмите «Включить». В переключении выберите учетную запись для хранения, чтобы сохранить все журналы, сгенерированные информацией о приложениях, которые мы создали ранее для проекта, и нажмите «Применить».

В некоторых последних словах мы увидели в этом обсуждении, как мы можем перейти от 0 до 100 с приложениями для функций Azure и минимальными ресурсами, которые требуются для его работы. Начиная с групп ресурсов, переход к учетной записи хранилища и пониманию приложений, которые интегрируются в функциональные приложения. Мы также увидели, как в нескольких и не очень сложных шагах смогли создать трубопроводы по сборке и освобождению для процесса непрерывной интеграции и развертывания, и в конце концов мы смогли проверить его без усилий. Я планирую в ближайшее время углубиться в эти функциональные приложения, чтобы показать более продвинутые вещи, которые мы можем реализовать, и я надеюсь, что вам понравится и каким -то образом принесет пользу.

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

Следите за новостями, как, подпишись, комментарий и все, что … До свидания

Оригинал: «https://dev.to/alxizr/afcicd-like-a-boss-azure-functions-ci-cd-pipeline-w-azure-devops-5ip»