Transcript for:
GitHub Actions

ребят Привет я рад вам представить новый большой курс на канале специально для подписчиков канала владелен Минин такой небольшой новогодний подарок вам и этот курс будет посвящен такому сервису как github actions то есть на самом деле мы будем заниматься такой концепцией как ся и сиди континентрейшн и continuouse livery на платформе github потому что он предоставляет нам специальный сервис actions где мы как раз таки можем работать с репозиторием после того как он был залит на платформу github и мы можем делать различные автоматические процессы с ним для того чтобы например тестировать приложение там собирать его собирать различную аналитику и так далее и в этом курсе вы вначале познакомитесь буквально немножечко времени мы уделим основам то есть что такое github Как там связывать репозитории как него авторизовываться чтобы не было ошибок и после этого уже сразу же перейдем к изучению actions на самом деле контента здесь будет довольно таки много он будет последовательный и в итоге Вы научитесь писать по сути любой workflow это кстати высокоуровневая инструкция которая есть в actions для того чтобы вы автоматическом режиме потом работать с вашим кодом то есть опять же мы все в основном будем рассматривать на приложение с react на самом деле там подойдет любой фронтальное приложение мы будем там тестировать его мы будем его эмулировать диплоим будем совершать Линт и в процессе вообще всех этих действий мы будем рассматривать множество концепций множество вариаций которые можно реализовывать с помощью github actions В общем это довольно таки продвинутый контент который сильно вас прокачает Если вы тем более сейчас начинающий вам точно это будет полезно потому что вы поймете вообще как все это работает поэтому подпишитесь на меня в телеграм-канал Если вы еще не подписались там кстати вы найдете бонус я ссылочку оставлю в описании в виде исходного кода и такой небольшой статьи к этому ролику чтобы вы всегда смогли вернуться и посмотреть какие инструкции были написаны и без лишних слов давайте начнем Приятного просмотра из в будущем А хотел бы я начать этот выпуск с рекомендации в своих проектах я довольно часто пользуюсь сервисами провайдеров в частности компании selectel selectel это компания предоставляющая надежную it-инфраструктуру десяткам тысяч клиентов дата-центра selectel расположены Как в России так и за рубежом они так давно selectel вошел в рейтинг лучших облачных баз данных провайдеров в 2022 году по версии синью с аналитикс более того в selectel цены на облачные базы данных сейчас снижены на 30 процентов облачная база данных или менедж databasses это сервис который позволяет быстро получить готовые к работе кластеры баз данных в Облаке облачные базы данных помогут ускорить разработку приложений и выход продуктов на рынок selectel берет на себя администрирование и автоматизирует процессы создания и поддержки отказа устойчивых кластеров баз данных на инфраструктуре selectel ваши данные будут храниться надежные и безопасно провайдер берет на себя защиту данных от краж и утечек регулярное создание бэкапов возможность быстрого восстановления данных вплоть до секунды развернуть кластер облачных баз данных можно в пару кликов из панели управления My selectel.ru это удобно Вы можете гибко настроить конфигурацию сервера по требования вашего сервиса и не переплачивать За неиспользуемые ресурсы ведь в selectel оплата происходит за потребление а при росте нагрузки можно быстро изменить конфигурацию и добавить больше ресурсов чтобы начать работу с сервисом достаточно зарегистрироваться на сайте mycelectel.ru выбрать регион и создать кластер выбрать какую базу данных будете использовать установить конфигурацию сервера выбрать количество реплик и все база данных готова регистрируйтесь в панели My selectel.ru по ссылке в описании или сканируете qr-код на экране и создавайте надежные кластер баз данных оплачиваете облачные базы данных по сниженной цене Итак давайте начнем это видео с небольшого ликбеза про то а что же такое github я сейчас нахожусь на официальном сайте и по сути Это продукт с компанией Microsoft которые служат для того чтобы разработчики со всего мира хранились здесь свой Исходный код и свои проекты которые используют систему контроля версии git это как раз таки и называется репозитория репозиторий мы можем показывать другим разработчикам откладывать его в Open Source или делать приватными для того чтобы там код мы видели только сами и это основа github но в действительности этот сервис Уже стало намного намного больше тут есть намного больше печей например покажу некоторые скажем github копают относительно недавняя фича они написали искусственный интеллект который помогает дописывать по запросу какой-то код и есть еще одна такая фича которая называется github actions который как раз таки посвящен данный ролик то есть именно эта фишка позволяет автоматизировать некоторые процессы построения тестирования и дипломонта проектов Короче говоря Si CD прямо внутри гитхаб этим мы будем заниматься на протяжении видео и в первую очередь я хочу начать с самых основ показать вообще зачем эта фишка нужна и как принципе это вписывается в экосистему github для этого я зашел на свой второй аккаунт и здесь я создам новый репозиторий специально для этого видео я возьму например будет github actions значит что мы видим при создании репозитория мы можем добавить опционально какое-то описание в целом оно здесь не нужно сейчас можем сделать репозитории публичном То есть все кто есть в интернете сможет видеть Исходный код Ну либо сделать его приватным то есть мы сами выбираем кто может видеть Давайте допустим это будет публичные принципе можно добавить файл redmi но нам не потребуется здесь и принципе все нажимаю Create репозитории и дальше нам github выдает инструкцию по которой мы можем соединить Исходный код который у нас есть на компьютере с данной системой безусловно для того чтобы все это работало Вам необходимо чтобы на компьютере была установлена система контроля версии git ее можно установить если она вдруг еще не установлена таким вот образом написать gitinstone Ну и вероятно на Первом сайте вы найдете инструкции того как это реализовать например Здесь я листа немного ниже и вижу ссылку которая позволяет мне установить как раз таки на macos Гид если у Вас Windows то соответственно вы найдете ссылку под Винду для того чтобы убедиться Да что гид стоит на всякий случай начинается всем прям со снов мы пишем гид минус Минус если он выдает что-то Это означает что гид установлен и все хорошо окей следующий наш шаг будет направлен на то чтобы создать какой-то локальный Исходный код проект и загрузить его сюда значит буду работать с vs кодом Давайте создадим новую папку завод допустим его gith actions Ну и здесь Для начала пусть меня будет обычный индекс HTML где задам базовый код в данном видео код конкретно нас не будет интересовать потому что мы будем именно работать с гитхапом больше дальше значит создаю терминал и в первую очередь Мне необходимо прописать команду гид и нет для того чтобы проинициализировать данный репозитории вообще система контроля версии гид дальше я добавляю все файлы с помощью команды git это точка и делаю первый коммент но сам допустим я назову его инит Окей мы сделали локальную подготовку и теперь наступает этап Когда нам нужно соединить локальный код с гитхабом То есть он еще предлагает сделать команду gitbranch минус мэйн чтобы переименовать ветку по умолчанию мастера в Main но делать я этого не буду Пойду со старым мастером дальше нам по сути нужно добавить URL данного репозитория То есть я просто копирую эту ссылку она у вас будет немного другая но в целом идея такая же мы ее добавляем И после этого нам нужно сделать непосредственно Push то есть так как редко у меня называется мастер Вот видите написано то я делаю git Push upstream Origin мастер и на этом этапе у вас может возникнуть ошибка неосознательно показываю весь этот процесс Потому что сейчас github немножечко изменили способ аутентификации и соединения локального кода с удаленным поэтому тоже хочу показать как это делается значит для того чтобы исправить эту ошибку мы переходим в github в настройки Далее в левое меню мы переходим в девелопер settings переходим в Access tokens Talking Classic и здесь мы можем создать новый токен значит здесь я вписываю пароль и здесь Нам необходимо задать ему какое-то Название но у меня уже есть несколько токенов поэтому я его назову таким образом дальше очень важно чтобы мы дали ему права доступа например на работу с репозиториями принципе пока этого будет достаточно И после этого мы нажимаем Talking дальше мы его копируем его нужно будет запомнить пока оставлю эту вкладку и дальше нужно будет сделать следующие изменения мы копируем опять же url-адрес данного репозитория переходим в командную строку и прописываем следующую команду git Remote Set yourl то есть мы уже до этого добавили Remote сейчас мы немножечко будем его менять говорим что мы меняем именно Origin Вставляю сюда этот URL адрес и дальше я перехожу до того момента как написан домен github.com сюда необходимо вставить будет персональный аксес токен я его копирую значит Вставляю сюда и дальше ставлю символ собаки теперь я нажимаю Enter И после этого мы опять Можем попробовать запушить наш код пуш минус U Origin мастер и Как видите теперь это все успешно работает то есть код мы залили хата гипно про это говорит и в гитхабе мы должны увидеть то что мы сделали первый коммент который называется инит и он был залит точнее создан 4 минуты назад теперь рассмотрим некоторые базовые элементы интерфейса которые есть в репозитории потому что это нам тоже потребуется значит в первую очередь мы находимся во вкладке код то есть здесь мы видим Исходный код вообще всего этого проекта чем больше файл тем соответственно больше он будет здесь показывать дальше из некоторых важных вкладок есть такая вкладка как ишьюс мы скорее всего поработаем с ней на протяжении этого видео здесь мы можем создавать какие-то задачки уточнения или ошибки которые есть в этом репозитории то есть допустим Я назову Егор один оставлю какой-то комментарий можно посмотреть как это выглядит здесь можно работать с макдауном и создаю новую ишью теперь она будет числить числится непосредственно у этого репозитория именно так работает Open Source то что многие приходят создают свои ишью и таким образом разработчики это исправляют есть такая вкладка как powere Quest с ней Мы точно поработаем она нужна для того чтобы мы корректно могли сливать разные ветки в одну то есть предположим У вас есть какая-то основная ветка которая является продакшн и вы хотите разрабатывать проект Если вы будете разрабатывать непосредственно на главной ветки то шанс того что Вы совершите ошибку он довольно таки велик поэтому вы обычно ведете разработку в какой-нибудь Def ветки вы опередили по коду основную ветку и дальше для того чтобы корректно соединить чтобы точно ничего не поломалось чтобы вся команда посмотрела на те изменения которые вы внесли делается как раз таки по request То есть это запрос допустим на Мерс ветки DF и Main как раз таки вот через этот Интер это делается То есть это то что относится непосредственно к репозиторию дополнительно и дальше мы видим следующую вкладку которая называется actions то есть мы плавно переходим к основной теме данного видео потому что поле actions это такая же дополнительная фича которая идет совместно с репозиторием от github и Давайте сразу посмотрим что есть на главной странице то есть сразу же github нам предлагает некоторые уже заранее готовые так называемые workflow какие-то шаблоны которые мы можем применить для этого репозитория что-то что касается диплоинта защиты continuouse intimation автоматизация страниц либо у нас есть другая опция это взять и создать свой workflow самостоятельно нажимаю на эту ссылочку и на этом этапе Я хочу теперь концептуально пояснить что вообще такое github actions для этого давайте я сделаю запрос в Гугле перейдем на сайт сайт github actions он находится под github features actions Как видите тут есть довольно таки много различных печей и здесь мы видим что github actions это фишка которая позволяет автоматизировать многие процессы связанные с репозиторием из кодом который хранится в этом репозитории например мы можем билдить наш проект тестировать его или заливать его куда нам нужно с помощью как раз таки так называемых workflow чуть позже мы как раз таки разберемся что это такое также github actions он полностью позволяет интегрировать такую тему как cycd при работе с репозиторием себя SD это Continuous intimulation и Continuous Delivery то есть определенные процессы которые связаны с работой нашего кода и нашего проекта чтобы вы концептуально понимали что такое cisd приведу простой пример вы допустим разрабатываете какой-то проект и вы разрабатываете его поэтапно то есть там сделали один коммит или сделали какую-то небольшую фичу И вам нужно посмотреть как это будет выглядеть на реальном приложении то есть этим как раз таки занимается Si когда продолжительное количество времени он берет и интегрирует какие-то частички кода в ваш проект потом допустим Когда вы тестировали какое-то уже фишку на вашем проекте Вам необходимо взять его и залить в продакшн это тоже процесс можно автоматизировать этим как раз таки занимается Continuous Delivery То есть например взять там собрать какой-нибудь докер контейнер развернуть его на определенном сервере там залогиниться и запустить проект либо например другой вариант это взять и вы допустим разрабатываете npm пакет взять его и автоматически за поближе Когда вы добавляете какие-то изменения в вашей репозитории То есть это чисто все про автоматизацию и то что вы можете делать с помощью этой фишки как вообще это происходит то есть сам по себе концепт actions Он работает на основе так называемого workflow то есть это и есть сам процесс и workflow он реагирует на большое количество ивентов которые описаны в гитхабе существует огромное количество ивентов которые мы можем слушать Ну например мы сделали какой-нибудь коммит Мы залили новый код была создана новая ишью был создан Power Quest и так далее То есть на каждый из этих ивентов мы можем реагировать и выполнять свое собственное действие это как раз таки happ actions и позволяет реализовывать помимо всего прочего github actions позволяет работать и тестировать и строить ваш проект на различных операционных системах то есть на текущий момент поддерживается 3 это Linux macos Windows причем разных версий и таким образом вы можете понимать на каких машинах все это у вас поддерживается какие есть проблемы это стерилизованы с помощью матриц и как раз таки с тем как это все работает мы будем разбираться в этом курсе Также хочу еще отметить что до определенного этапа в принципе все эти фишки они бесплатные то есть до тех пор пока вы не выйдете за 2000 минут в месяц вам даже не нужно платить естественно Если вы больше пользуетесь этими фишками то тогда придется уже создавать какой-нибудь платный аккаунт Но это больше сделано там для больших компаний корпорации и так далее Теперь мы плюс-минус разобрались как что есть концептуально такое github actions и теперь Вернемся вот на предыдущую вкладку когда мы сказали что мы самостоятельно хотим создать так называемый workflow Здесь также стоит пояснить из чего вообще принципе и каким образом работает github actions потому что для каждого репозитория Вы можете создавать свой собственный workflow и это такой как бы ключевой момент Ключевая инструкция для определенных процессов в репозитории непосредственно вот этих workflow их может быть несколько то есть не обязательно будет один может быть несколько процессов для одного репозитория но при этом каждый workflow он создает состоит из так называемых Jobs То есть если локализировать на русский язык то это какая-то работа и этих работ может быть много внутри одного workflow и также стоит отметить что внутри каждой джобет то есть внутри каждого работы условной есть шаги steps их тоже может быть несколько то есть вот такая получается трехуровневая композиция и Давайте я лучше наглядно покажу как это выглядит то есть мы сейчас с вами пытаемся создать свой первый воркфлоу для репозитория где у нас есть всего лишь один HTML файл в первую очередь мы можем как-то назвать этот Ворк лоб потому что именно по названию и определяется его название его тайтл допустим я называю его дома мы создаем его ветки Мастер и стоит отметить что workflow это определенная инструкция в формате яму он описывается как умель расширение и здесь прямо в онлайн редакторе мы можем создать как раз таки первую инструкцию мы начинаем все обычно с параметра name так я могу попробовать увеличить масштаб чтобы получить понятнее и имя мы можем можем задавать какое-то произвольное Например я его так и назову Demo Flow дальше нам нужно описать параметр он это примерно как в JavaScript то есть Какое событие вы хотите слушать и здесь принципе тоже самое то есть на какой Триггер будет реагировать данный workflow для того чтобы автоматически запуститься Да я уже немножечко рассказал про ивента что они бывают разные и есть на текущее специальный такой Event мы можем нажать на самом деле Control Space или Option Space и у нас вылезет подсказка Где мы можем посмотреть какие принципе ивента есть Как видите их довольно таки большое количество и на текущем этапе нас интересует такой Event как workflow dispatch мы Давайте не будем выписывать в виде массива пока пойдем по Простой Простой схеме Event workflow dispatch означает что этот workflow мы будем запускать в ручном режиме то есть самостоятельно пока никакой автоматизации для того чтобы разобраться именно с концепциями И после этого мы описываем Такое поле как Джобс теперь Пару слов про то что из себя представляет инструкция в формате яму здесь все очень четко основано на идентации то есть если мы говорим что дальше контент будет относиться именно к Jobs то мы делаем тап и здесь уже описываем все остальные составляющие значит Как создать свою первую работу или жопу данном случае довольно таки Сложно ли локализировать поэтому буду по-английски называть их Джобс Нам необходимо дать какое-то имя этой работе допустим назову ее Принт естественно можно назвать там как угодно абсолютно принтема и так далее Это только влияет на то как это будет потом отображаться в непосредственно интерфейсе то есть мы задали имя и я делаю еще одну идентацию после чего я уже задаю какие-то базовые параметры непосредственно для вот этой вот жобы Первый параметр называется runs дефис он попробуем посмотреть подскажет ли нам что-нибудь github Нет не подскажет Окей значит здесь мы говорим на какой машине на каком сервере с какой операционной системой Нам необходимо запустить данный workflow обычно и скорее всего на протяжении всего этого курса Я буду работать с ubuntum latest то есть буду запускать данный workflow на системе Ubuntu Ну и последний доступной версии как вообще узнать какие в принципе раннеры присутствуют в github actions Но это можно легко прогуглить github actions runners дальше переходим к первой ссылке в документацию и здесь мы где-то можем увидеть непосредственно список вот таблица есть доступных ранев на этой платформе То есть если вы хотите все запускать на винде последний например то мы пишем Windows latest можно запускать Windows 2022 например вероятно будет там Windows 2023 Я например вот запускаю на Ubuntu latest Ну или это можно подписать конкретно его версию 22.04 и также мы можем работать с macos то здесь Вы сами выбираете На какой платформе все это запускать и именно отсюда берется эта информация Окей Мы идем дальше мы прописали На какой платформе все это будет работать и дальше Вот мы сейчас находимся внутри одной как бы работы задачи и как я говорил Job он может состоять в том числе из множества шагов по-английски это степс собственно мы здесь их описываем steps Ну и так как нам опять нужно Здесь контент то я делаю идентацию и вот выглядит каждый из шагов мы с помощью дефиса указываем его имя опять же имя в данном случае будет произвольное потому что это нужно для нас чтобы мы правильно определяли что происходит конкретно на этом шаге пока что для вот этого демо workflow мы сделаем что-нибудь супер мега простое допустим выведем в консоль какую-то информацию значит дальше я снова делаю идентацию то есть нажимаю Tab и прописываю Run и дальше я могу что-то сделать уже непосредственно с консолью на платформе Ubuntu Ну например с помощью команды Эко я могу вывести Hello github actions например таким образом и в принципе нам этого будет на текущий момент достаточно то есть Так выглядит самый простейший workflow что мы делаем после этого нам необходимо его добавить непосредственно в репозиторий то есть по сути нам нужно изменить Исходный код и поэтому нам необходимо сделать коммит я нажимаю Start commit в принципе по умолчанию меня устраивает название этого комита Так ну и можно здесь добавить описание этого делать не буду нажимаю коммент New файл Теперь если мы посмотрим на наш репозитории то помимо индекса HTML у нас также еще и появляется специальная папка github и там есть вложенная папка которая называется workflows то есть это то что сделал непосредственно сам commit и внутри этой папки хранится email файл который мы только что создали то есть по сути это просто обычный файл который мы добавили в репозитории Теперь если мы перейдем в actions то мы видим что сейчас у нас присутствует в левое меню как раз таки тот самый демо workflow который Мы создали перехожу в него и так как мы добавили для него Триггер который его запускает workflow dispatch то мы можем его запустить только вручную То есть пока что как я говорил здесь нет автоматизации я Нажимаю кнопочку Run workflow выбираю ветку в которой необходимо его запустить и собственно нажимаю запустить этот workflow дальше мы переходим в workflows и видим что у нас демо workflow сейчас как бы работает он выполняет одну задачу это Принт и Давайте посмотрим что он вообще здесь делает все мне прихожу кстати пока я говорю он уже выполнил то есть что все вам за 0 секунд и выполнил она стала зеленый но тем не менее мы можем на нее посмотреть и узнать что в ней происходило значит в первую очередь происходила настройка непосредственно самого вот этого Job то есть настройка была операционной системы да как я говорил это Ubuntu 22.04 запускаются различные имиджи то есть мы все это можем посмотреть что непосредственно происходило на виртуальном сервере на котором как раз таки запускаем этот warflow и вот как видите у нас есть первый шаг этой работы тот который мы описывали что-то вывести в консоль Я его раскрываю вот что выполнялось непосредственно на машине в консоли и вот что мы получили Hello github actions И после этого у нас работа завершилась мы очистили как бы все процессы все workflow закончен в принципе это есть как раз таки первый этап формирование этих слов Давайте ради теста посмотрим значит Можем ли мы что-то изменить сейчас в данном процессе я допустим нажму сюда три точки нажму кнопочку vieworkflow file и здесь Я нажму кнопочку редактировать пока мы еще идем с онлайн редактором который идет совместно от github И на самом деле здесь мы можем добавить например еще один шаг то есть внутри одной жопы может быть сколько угодно шагов мы сами это определяем я добавлю еще один шаг который назову например Принт [музыка] хочу теперь вывести уже несколько строк в консоль и то же самое делаю Run для того чтобы вывести несколько строк Я ставлю здесь вертикальную черту даже дальше нажимаю Enter после этого нажимаю Tab И после этого мы можем опять же с помощью команды Эко что-то выводить в консоль например например изменим наш workflow таким образом опять же нажимаю Start commit в принципе меня устраивает название camita нажимаю commitchenges теперь мы видим что в репозитории нашего изменен переходим в actions перехожу в демо workflow и опять же вручную его запускаю Теперь если на него посмотрим уже в процессе выполнения вот он Принт вот он начинает какие-то жопы ждет пока там все будет настроено все она выполнилась то есть это работа происходит моментально потому что мы всего лишь что-то выводим в консоль Если посмотрим на первый Принт то мы видим что вот наша строчка и появляется следующий шаг то есть внутри одной работы Когда мы выводим уже несколько линий в консоль в принципе Мы создали первый workflow который работает мы даже разобрались с тем что такое Job Что такое steps и именно с этим сетапом мы уже можем продолжать для этого я предлагаю создать новый репозиторий репозитории новый репозитории Например я его назову github actions react Мы будем работать в данном случае с реактом но опять же мы не будем идти в Исходный код это будет только лишь Как пример работы с frontent приложением Значит у нас сейчас есть инструкция которые позволяют соединить Nano репозитории с нашим исходным кодом и что нам потребуется сделать нам потребуется создать в общем-то этот Исходный код создам новое окно в vs код я сложу папку actions react и мы про инициализируем этот репозиторий с помощью терминала значит Ну естественно Вам необходимо чтобы была установлена но Джесс на компьютере потому что мы сейчас будем работать с npm то есть проверяем что они у нас есть и дальше прописываем npx Create react Up и в текущую директорию Я хочу его сгенерировать то есть нам только здесь потребуется код опять же повторюсь что мы не будем его трогать Просто большинство фронтен приложения они выглядят примерно одинаково и на примере реакта нам будет довольно таки просто понять опять же Какие манипуляции мы делаем с репозитория того чтобы в общем настраивать как раз таки это вся и сидим и различные процессы автоматизировать Итак мы получили Исходный код проекта то есть его базовая структура такая что есть папка над морриус Где хранится весь Исходный код Есть папка Public в папке Source хранится уже непосредственно сам код который написан реакт Вот например GSX классический и тут также есть еще и тесты которые там ну тестирует какую-то базовую составляющую приложения из того что нам важно есть package.json где есть список зависимости для данного репозитория и есть определенные скрипты которые позволяют тоже немножечко автоматизировать процессы в этом проекте то есть помощью старта мы запускаем процесс для разработки приложения с помощью билда мы собираем Продакшен бьют с помощью теста мы Тестируем все это приложение это нам попозже потребуется Джек это дополнительный скрипт который позволяет достать Исходный код пока который собирает вообще весь этот проект нам он не потре в этом Видео давайте сделаем следующим образом по умолчанию Create reactop создает тоже систему контроля версии git я возьму ее удалю вот таким вот вульгарным способом просто папочку гид точнее ра-минус.рф.гид и начнем с самых основ в первую очередь мы про инициализируем этот репозиторий уже с чистой системы контроля версии дальше я добавлю все файлы папки Здесь также стоит отметить что в корне присутствует файл getecnor и некоторые вещи мы не добавляем в систему контроля версии Что является правильным решением это НОД модули не попадают бьют не попадает которого Пока нет но опять же если мы запустим Билд то эта Папочка появится но нет смысла как бы добавлять ее в Гид потому что мы получаем через процессы да то есть она тоже не идет в Гид Ну и так далее там дополнительные различные файлы и папки которые мы в Гид не кладем После этого мы делаем git commit минусам допустим будет называться нет и дальше для того чтобы соединить Да вот с этим репозиторием Нам необходимо получить доступ к Access токину поэтому я могу скопировать эту ссылку но я пока не буду нажимать Enter потому что хочу сюда добавить этот Access давайте мы уже знаем как это делается да то есть перейду в сеттинге токены давайте я возьму допустим [музыка] этот вот Out нажму regenerate То есть можно и заново использовать какие-то уже существующие токены я скопирую его посмотрю что здесь есть все необходимые права нажимаю апдейт токен Так теперь Вставляю его перед хабом И добавляю собаку нажимаю Enter И после этого делаю гид пуш обстрим Origin мастер все Как видите мы теперь моментально заливаем уже репозитории Ну и теперь для него привязана авторизация То есть если посмотрим то вот все он отображается в github Теперь мы можем создать какой-нибудь первый workflow Именно для этого репозитория и я предлагаю это сделать уже непосредственно в Visual Studio код то есть локально на компьютере а не через редактор на github сделать Это довольно таки просто мы создаем в корне папку точка github В нем мы создаем папку workflows и здесь мы создаем какой-нибудь первый workflow который скажем Я назову testing.ml например первая практическая задача с которой мы хотим разобраться при построении вот этой автоматизации это когда мы заливаем новую версию кода в github Мы хотим чтобы автоматически прогонялись все тесты для этого проекта и я хочу это реализовать как раз таки с помощью этого workflow Поэтому я его и назвал тестинг а не какой-нибудь тест это уже все полностью рабочий workflow который мы будем использовать для начала Нам необходимо добавить поле name и скажем что данный Ворк лоб будет делать допустим я скажу ему что он будет тестировать реакт приложения дальше мы добавляем Триггер то есть на Какое событие будет запускаться непосредственно этот workflow и в прошлый раз Мы работали с триггером workflow диспач то есть запускали его вручную Но в данном случае мы хотим чтобы приложение тестировалось Каждый раз когда мы заливаем новую версию кода в репозиторий И для этого есть другой ивент который называется Push в данном случае оставим его мы чуть позже разберем как работают ивенты Как можно их там детализировать но на данном этапе Я думаю что будет довольно таки просто разобраться что он реагирует на изменения которые мы заливаем в репозитории дальше мы описываем список работ ТО есть Джобс который нам необходимо реализовать в данном случае Нам необходимо реализовать только одну работу она называется Тест опять же называть вот эту штуку мы можем как угодно тест май комп можете так называть как бы это не принципиально Вот но принципе понятно что Это отличает именно за тестинг и дальше нам необходимо определить На какой платформе На какой машине Мы будем все это запускать бунту laitest я буду запускать весь непосредственно код и дальше опишем шаги которые нам потребуется сделать для того чтобы протестировать вообще это приложение и здесь Давайте концептуально подумаем а действительно что вообще нам нужно сделать вот мы получили Исходный код в таком виде то здесь нет папки ни над модуля там не бьют и при этом нам как-то нужно все это установить И прогнать тест на самом деле первый шаг который необходимо предпринять это вообще получить доступ к этому исходному коду Потому что сейчас вот условно Вот на этом этапе мы еще находимся в виртуальной машине github на сервере и там нет доступа непосредственно к коду репозитория в котором мы работаем то есть там есть доступ к консоли но кода самого нет поэтому первая задача которая перед нами стоит первый шаг это взять и получить код данного репозитория Допустим я его так назову Гетто репост рикот не уверена счет Да нужно здесь или нет но главное чтобы мы по смыслу понимали Как нам это реализовать есть простой довольно таки способ это поработать с так называемыми дополнительными экшенами которые есть уже в экосистеме github что я имею в виду если мы вообще в принципе в гитхабе находясь перейдем в Такое поле как marketplace то здесь мы увидим довольно таки большое количество дополнительных каких-то там ботов расширений приложений фильтрации по категории то есть здесь есть большое количество функционалу который мы можем использовать и в данном случае нас на самом деле интересует поле actions Action это грубо говоря определенные куски уже workflow которые за нас написали другие разработчики и которые мы можем использовать то есть мы можем не прям с нуля описывать какой-то процесс А мы можем использовать уже части которые часто используются другими разработчиками и внедрять их в свое приложение Ну например кстати скорее всего разберемся с beaut артефакт и оплот артефакт очень интересная экшены Вот например сетап но gsn virment то есть вот как это выглядит экшен который мы можем использовать и по сути что он делает он берет и устанавливает определенную версию но Джес который мы говорим на виртуальную машину вообще по умолчанию это смысла особо не имеет делать потому что в Заранее установленных программах на серверах в том числе есть ноды но тем не менее Мы тоже с этим экшеном разберемся Потому что таким образом протестировать наше приложение на различных версиях но Джес То есть это просто Как пример непосредственно какого-то экшена который мы можем использовать и в поиске мы можем найти такой экшен как чекаут переходим в него здесь мы видим что да это верифицированный создатель экшена это вообще экшн идет непосредственно от самой команды github и он как раз таки позволяет взять и получить Исходный код на сервере с помощью этого Action значит запоминаем что текущая версия 3 Несмотря на то что по какой-то причине здесь написано 26 Но это важно я сейчас объясню почему здесь мы можем посмотреть как вообще это работает Как вы использовать и если до этого мы описывали команду Run там Эко что-то то для того чтобы использовать уже готовый Action есть другое поле которое называется юзас то есть мы хотим заиспользовать другой кусок он называется actions Check Out и здесь мы добавляем собаку В3 то есть вот как мы используем непосредственно этот экшен Ну и на самом деле Почему я сейчас написал Да потому что в документации сразу же уже указанный uses хотел чтобы вы понимали куда конкретно это нужно внедрять то есть мы прописали ровно то что мы будем использовать этот чекаут причем определенной версии Потому что есть и предыдущая версия и дальше есть еще возможность указать что этот экшен будет работать с определенными параметрами с помощью такой команды как with мы на текущий момент не будем ее использовать Но в общем так вот примерно выглядит дальше мы в инете уже что-то описываем мы поработаем с параметрами в других экшенах пока все что нам нужно сделать это вот указать что имя у нас шага мы получаем код репозитория мы используем данный экшен в принципе этого достаточно пару слов еще про то как выглядит экшены собственно здесь Можете посмотреть их Исходный код Непосредственно github да Вот видите что есть специальный actions есть чекаут и здесь принципе все описано как им пользоваться какие там есть параметры можете посмотреть Исходный код и прочее мы так глубоко не будем этим заниматься но важно понимать что есть уже готовый marketplace для большого количества решений Окей с этим мы разобрались Давайте дальше то есть мы получили сейчас Исходный код на виртуальной машине и что нам необходимо сделать после этого после этого нам необходимо установить НОД модули в проект потому что иначе не с кем будет работать нечего будет тестировать поэтому так назовем Что Я хочу установить зависимости и здесь по сути нам просто нужно сделать Install и этого будет достаточно но опять же если вы более подробно почитаете документацию по github actions там сказано что если у вас присутствует Лог файл который по сути говорит какие версии каких пакетов От чего зависит то лучше и безопаснее использовать команду не эмпим стол а команду npm Si это принципе то же самое но отчасти это экономит время и делает процесс установки зависимости более безопасно просто ради примера значит если я удалю папку Nod модулем локально сейчас да Видите она пропала и попишу команду npmsi то учитывая опять же что у меня есть Log файл то он сделает то же самое что и npm Install Вот Но именно в рекомендациях указана такая команда поэтому делаем то же самое что импевенный стол и что мы делаем После этого у нас уже есть Исходный код У нас есть список зависимости Нам необходимо просто взять и протестировать данное приложение то есть мы так и говорим тест допустим Application и нам нужно запустить в консоли npm Run тест опять же если мы локально это запустим так я нажал а для того чтобы запустить все тесты то как Видите вот у нас был один файл uptest.js и он там проверяет что react будет рендерить все необходимые ссылки все тесты прошли все хорошо окей можем остановить процесс и в принципе этот workflow теперь должен работать соответственно Как нам его запустить на гитхабе по сути он реагирует на Push то есть Нам необходимо запушить весь Исходный код в систему поэтому я делаю гид at Mid добавляем его название допустим это testing workflow И после этого делаю гид Push Теперь мы переходим в репозиторий я обновляю страницу далее перехожу в actions и Здесь мы получаем небольшую ошибку Давайте посмотрим неправильно написанному или файл здесь написано что у нас есть проблемы на 4 линии потрясающе когда Видимо я вам показывал как назвать Job я почему-то взял и удалил принципе его название то есть естественно здесь должно быть название непосредственно этой работы теста назовем и вот это вот все мы должны сделать индентом То есть такая правильная структура давайте быстро это поправим Fix for одновременный github перехожу в actions Да и теперь видите он начинает работать переходим в этот workflow у нас пока что есть одна работа тест Давайте посмотрим на то как он вообще будет происходить то есть мы настроили сервер получили Исходный код дальше мы устанавливаем список зависимости Видите вот появляется вот базовые Воронки которые обычно у нас есть когда мы делаем стол это занимает какое-то количество времени дальше происходит тестирование приложения и все по идее workflow у нас завершился Да видите он теперь стал зелененьким все то есть мы в автоматическом режиме протестировали наше приложение когда залили код я перехожу Давайте посмотрим на этот тест Application что нам выдал и вот принципе он говорит про то что да был единственный тест который берет и рендерит все ссылки в react в принципе выглядит Это неплохо и мы сделали уже первую полезную работу с помощью И cropection зачем это нужно вообще да Затем что предположим вы разрабатываете какую-то новую фичу и очень важно чтобы все остальные тесты которые есть у вас в приложении проверяли что оно работает правильно Да и в ручном режиме чтобы это происходило Вот вы настраиваете такой workflow и прикажем каждый там допустим каком-то событии скажем по request или комите вы проверяете что тесты не сломаны Что вы делаете Все правильно пример так концептуально это выглядит таким образом Теперь давайте немного попрактикуемся и сделаем данный workflow сложнее то есть какие еще процессы автоматизации мы можем сделать с данным репозитория предположим Мы хотим помимо того что протестируем его также хотим проверить качество кода с помощью ЕС линто и например собрать Этот проект будет у нас три этапа Для начала я хочу немножечко настроить проект для того чтобы он работал с нашим проектом при проверке кода значит пакет называется если int config react Up опять же сейчас с точки зрения функционала не столь принципиально что конкретно мы делаем факт том что нам нужна какая-то команда которая просто линтит весь проект я копирую ее дальше устанавливаю два пакета как зависимость для разработки и в пакет же добавляю еще один скрипт пусть будет называться Линт что он будет делать он будет обращаться к Yes ленту и проверять папочку Source Теперь мы можем в консоли приписать npm Run Линт Как видите все получается да то есть если у нас отрабатывает в принципе опять же для автоматизации нам этого будет более чем достаточно поэтому а Давайте попробуем это добавить теперь в workflow для этого я предлагаю взять и переименовать данный файл потому что теперь он будет у нас работать не только с тестированием но и в принципе с таким довольно-таки длительным процессом Например я назову его дипломмент соответственно имя данного тоже изменю тепло react Up например пусть будет называться в принципе первый шаг который мы будем делать это именно тестирование проекта то есть мы его уже реализовали Давайте теперь создадим Это было как бы первое да задача первый Job Давайте создадим другую работу потому что мы до этого еще не делали несколько работ в одном workflow собственно говоря я опускаюсь табом Да вот на этот уровень чтобы мы находились ровно на уровне теста и Давайте следующую работу которая назову она будет называться Линт в принципе Здесь нам нужно сделать плюс-минус то же самое что и мы делали до этого то есть на самом деле я могу просто взять все это скопировать вставить в эту работу потому что каждая как бы работа Она состоит из тех же самых строительных блоков мы запускаем все это на ubuntulators вначале получаем код потом устанавливаем зависимости единственно что вас будет отличаться третий шаг это мы будем не тестировать приложение мы будем проверять на качество кода и здесь запускать другой скрипт Линт Я думаю что здесь вопросов не очень много будет Поэтому Давайте сразу перейдем к следующему шагу и создадим еще одну работу которая будет брать и собирать нам весь проект Я назову его бьют опять же вот эти вот название мы сами придумываем То есть это не какие-то фиксированные я копирую составляющую и опять же меняется только последний шаг здесь будет называться бьют Application и npm Run build в принципе После этого мы можем добавить еще одно Наим скажем какой-нибудь диплой условный и здесь просто пока пропишем ЭКО какой-нибудь текст чтобы Мы понимали что и тут еще что-то происходит когда Мозги у телепроект опять же сейчас речь не про это то есть вот примерно теперь как выглядит наш workflow Давайте теперь возьмем и закомить им все эти изменения То есть я добавляю все файлы папки Все изменения дальше делаю гид КАМиТ минусом допустим импрув Work Flow deployment и делаю гид Push теперь Значит если мы посмотрим в код то мы видим что у нас был изменен workflow ну из меня еще пять в том числе перехожу в actions вот у нас есть workflow Да диплой реактаб можно на него посмотреть Ну тут название камита и на текущий момент мы уже видим как у нас присутствует уже три работы да то есть есть тест есть Линт есть бьют и здесь стоит отметить что они все идут в параллели то есть они не зависят друг от друга и поэтому каждая из этих Job of она запускается отдельно и на текущем этапе Мы видим что все успешно было запущено то есть мы успешно тестировали приложение Да вот на выводит то что мы уже видели у нас успешно прошел линдинг приложения видите как нам ничего не выдают означает что весь код у нас хорошо был написан но собственно говоря и Билд приложения тоже был реализован вот у нас всякие файлы статические появились Ну и также мы еще добавили здесь Step deploy Да где мы вы видели в консоли depling то есть Таким образом получается что [музыка] когда мы создаем как раз несколько таких джоббов то они выполняются Независимо друг от друга параллельно и это классно но мы можем естественно также этим управлять Например если мы понимаем что какая-то из этих жопов зависит от другой Джоб и Давайте покажу пример предположим что если у нас приложение не оттестировалась то тогда нам не нужно там продолжать остальные работы то тогда мы можем Или например что линд у нас будет зависеть скажем от теста то тогда мы можем добавить еще одно здесь свойство уже непосредственно в жопе который называется ниц то есть какой работы нам Необходимо дождаться чтобы она выполнила чтобы заплатить уже эту работу Ну собственно говоря мы здесь описываем тест потому что мы зависим от неё при этом например бьют Да он скажем у нас будет зависеть от Лента то есть будет такая последовательность да получается работ Давайте посмотрим опять же мы все добавляем гид [музыка] ets to workflow теперь переходим в экшены переходим workflow Да и мы теперь видим что по умолчанию у нас идет тест пока он не выполнится Линт не запустится то есть естественно это будет дольше но в любом случае мы можем выстраивать такую последовательность никак видите github это успешная интерпретирует опять же это все сильно зависит от требований бизнес требований которые есть у нас на проекте можем так реализовывать опять же если мы немного сейчас подождем учитывая что мы не меняли код все вся эта цепочка должна выполняться успешно то есть тест мы переходим к линдингу если линдинг будет успешен тогда мы переходим уже непосредственно к билду и так далее На текущий момент все работы выполнились и вы видите что Да действительно цепочка у нас зеленая также Я бы хотел отметить что workflow который мы создали сейчас мы можем написать немножечко Иначе я сейчас просто это скопирую и для примера покажу как можно иначе давайте сделаем следующим образом чтобы код не терялся Я в корне проекта создам еще одну папку и здесь создам файл deplayment яму кстати интересный факт про расширение ML его можно нажимать как uml или яму это одно и то же поэтому вы можете увидеть разные В общем этот папка это просто для нас чтобы сохранились все эти workflow Потому что мы будем делать их несколько и теперь давайте перепишем дипломмент чтобы он делал ровно то же самое что мы сейчас и делали но при этом мы можем все это реализовать через только один Job путем размножения степь Давайте назовем одну единственную жопу которая у нас будет диплом например она запускается на ubuntulators первый шаг который нам необходимо предпринять Да это получить Исходный код потом установить зависимости потом мы Тестируем приложение потом мы можем сразу же здесь сделать лендинг приложения и после этого мы можем в также шагах взять его собрать Ну и условно задеплоить да то есть вот это вот все мы можем выпить а в принципе по функционалу это будет ровно то же самое что мы и до этого описывали Давайте посмотрим Будет ли это работать допустим я назовут трансформ workflow и сделаю переходим в actions да Видите сейчас всего лишь один Джо присутствует здесь называется диплой Ну и Давайте посмотрим как у нас будет здесь реализовываться то есть опять же это сильно зависит от задач которые перед вами стоят но в принципе я на своей практике нашел что разделение на различные жобы все-таки выглядит более удобно более эффективно но тем не менее Вы должны понимать что мы можем абсолютно по-разному описывать эту логику для автоматизации дано и по завершениям Мы видим что она завершилась за 45 секунд То есть почти что в полтора раза быстрее чем предыдущий подход потому что мы всего лишь один раз устанавливали список зависимости и получали код Ну и вот что мы видим то есть мы получаем код репозитория дальше мы устанавливаем зависимости потом мы Тестируем приложение здесь Ок потом делаем лендинг делаем Билд после произошел там условный диплоида с помощью Эко Ну и все то есть это то как мы можем тоже автоматизировать некоторые процессы для таких приложений Теперь давайте разберемся с тем что такое контекст в github workflow И для этого я перейду опять же в текстовый редактор в папочке github я могу создавать на самом деле еще и другие workflow которые также параллельно через определенные триггеры будут запускаться то есть давайте пока временно я оставлю здесь два файла для того чтобы вы просто посмотрели Что такое возможно допустим следующий workflow Я назову Pool request .ml добавлю здесь нижнее подчеркивание и Давайте зададим здесь базу то есть начали мы даем какое-то имя данному workflow допустим звонил Принт по квест контекст дальше я говорю На какой Триггер данный workflow будет реагировать давайте пока оставим здесь workflow диспатч чуть позже мы это поправим да то есть Напоминаю что этот ивент мы вызываем вручную через интерфейс самого github и опишем некоторые задачи которые перед нами стоят допустим сдачи Я назову Принт здесь мы говорим в первую очередь на какой машине на какой операционной системе Все это будет запускаться ubuntum lates например и пропишем шаги которые нам необходимо выполнить на самом деле здесь будет [музыка] такой единственный шаг это Принт ивент Давайте там Принт контекст и что я хочу здесь сделать Я хочу вывести в консоль если уже добавлю кавычки специальный Объект контекста который позволяет нам добавлять некоторые данные и пользоваться ими прямо внутри workflow для этого есть специальный синтаксис мы ставим знак доллара две фигурные скобочки и объект контекст называется github Давайте попробуем вывести Что же нам это даст То есть я добавил новый workflow соответственно необходимо сделать коммит это не workflow и делаю дальше сейчас у нас по идее должно запуститься [музыка] сразу же Один workflow Да потому что он реагирует на пуш и сейчас у нас пошло вот тепло и там и так далее проще но при этом у нас также есть еще один Flow Принт Пури квест контекст который мы запускаем вручную давайте тоже его запустим сейчас в экшенах Мы видим что у нас запущена как бы два варфлоу то есть в зависимости от количества инструкций которые вы добавляете в папку github workflows у нас будет запускаться нужное количество процессов естественно каждый процесс это определенное количество ресурсов В бесплатной версии ограничены двумя тысячами часов работы но тем не менее Вы можете это масштабировать сколько угодно то есть это я оставил пока только ради теста и с этим флоу Я думаю что все понятно Давайте перейдем теперь вот В принт посмотрим что нам вообще выдал переходим В принт и если посмотреть на Принт контекст который я вам хотел показать Мы видим что мы в консоли получаем object то есть на текущий момент мы не можем Посмотреть что находится внутри непосредственно этого контекста и для того чтобы правильно его вывести мы можем прогуглить следующие github actions expressions переходим в документацию и с помощью Expression of следующий до концепт который есть мы можем что-либо производить там в консоли внутри workflow и внутри actions есть некоторые функции то есть непосредственно сам Expression Да это синтаксис который я показал есть поле functions который мы можем использовать внутри этих Expression of например контент Stars and Speed вывести какой-то определенный формат либо например привести какое-либо объект к джейсону то есть чтобы мы видели не только [музыка] объект Да но мы видели его составляющие Давайте исправим этот Flow Просто берем используем эту функцию ту json сохраняю и давайте для того чтобы мы не тратили ресурсы github чтобы вот этот диплом у нас каждый раз теперь Не запускался я пока возьму его тоже скопирую и Добавлю его в samples диплои допустим [музыка] Да потому что здесь мы делаем все в одной дроби и отсюда Теперь я могу его удалить то есть мы будем сейчас запускать только вот этот Пури квест соответственно я делаю gited точка git commit message это FN to workflow конечно лучше такие названия коммитов не оставлять лучше поподробнее описывать но я думаю что вы понимаете что мы сейчас находимся внутри учебного курса где все-таки время очень важно Поэтому я здесь делаю определенные допущения которые естественно не работают в Production разработки Итак вот мы залили все получается Давайте его заново запустим что переходим в workflow Print он должен очень быстро у нас завершиться Принт контекст готов И теперь мы уже получаем не просто объект здесь мы видим подробнейшую информацию Потому Какие данные в принципе у нас есть в рамках этого workflow то есть из интересного да то что мы там делали пуш из ветки мастер есть название репозитория есть владелец репозитория айдишко его рель и Ну много дополнительной информации до которые нам может потребоваться есть определенные ивенты например да которые были запущены Ну и в общем-то Если Вы посмотрите внимательно то любая информация короче которая есть в github относительно этого репозитория она нам также здесь доступна то же самое касается различных То есть вы можете пользоваться таким контекстом и отчасти Мы тоже затронем его функционал для того чтобы так или иначе настраивать этот автоматизацию на этом примере Я хочу показать Да что мы вот немножечко можем с этим сделать предположим теперь я хочу значит взять наш workflow Pure квест и немножечко видоизменить то есть на текущий момент мы можем его запускать с помощью только одного триггера это ручной запуск данного workflow Но скажем Я хочу добавить чтобы этот мы могли запускать в том числе там через несколько триггеров для этого мы можем добавить все в такой массив И через запятую перечислять триггеры которые будут его запускать то есть мы знаем что присутствует еще такой Триггер как Push и Давайте я покажу где можно найти полный список вообще событий до которые мы можем использовать начну опять же с Google где напишу github actions workflow triggers вот наша ссылка ивент Триггер warflow и в принципе если мы перейдем в valebal events здесь мы можем посмотреть большое количество действительно событий до которые мы можем использовать то есть Ну например Если так посмотреть через название Мы создали там какой-нибудь форк была создана ишью [музыка] вот Push до который мы разбирали есть вот workflow диспанч который тоже мы уже рассматривали например перед нами стоит задача что мы хотим запускать какой-то процесс когда был создан скажем по request Или например ишью Давайте Спорим квестом скажем разберемся Да вот я перехожу в Power квест события так и называется поре квест поэтому Давайте мы его здесь и опишем и также Я хочу здесь обратить Ваше внимание на то что [музыка] каждое событие вот скажем Пури квест Да если мы просто его перечисляем то он сразу же автоматически будет подтягивать реагировать вообще на любые активити тайпс до которые к нему привязаны То есть например мы там назначили по request на определенного разработчика все отработал workflow мы там скажем добавили какой-нибудь лейбл отработал workflow то есть понимаете да Что здесь довольно таки большое количество под событий которые также могут регирить этот workflow соответственно это все называется Activity types или там фильтры и мы можем их детализировать на Какие конкретно вообще события Мы хотим реагировать поэтому есть вот такой вариант синтаксиса или бы мы можем по-другому это описать то есть в on мы делаем опять же табуляцию И говорим что во-первых мы реагируем на workflow нижнее подчеркивание dispatch ставим двоеточие и также мы реагируем на пол request также ставим двоеточие и делаем табуляцию здесь мы описываем Какие активити тайпс Нас интересуют это уже в массиве допустим [музыка] мы открыли по request то есть его создали да тогда это называется opent допустим он был отредактирован Edit и скажем realpent то есть Вот например на такие только типы мы будем как бы запускать данный workflow Также хочу обратить Ваше внимание Вот на этот синтаксис то есть Понятное дело что workflow dispation не содержит себе никакие активы types но по синтаксисуль мы все равно хоть это единичный элемент списка нам все равно нужно ставить двоеточие То есть это такая особенность Значит мы добавили workflow для того чтобы он работал и реагировал на создание Пури Квеста и Давайте здесь мы будем выводить именно github.ivent посмотрим какие данные нам в принципе там будут доступны Теперь давайте сделаем гид commit по request workflow и сделаем гид Так сейчас мы в репозиторий если попадем перейдем в поле actions то сейчас не должно запускаться никаких процессов Да потому что у нас либо вручную Либо мы реагируем на Пури квест поэтому Давайте попробуем создать какой-нибудь новый Пури квест значит для этого немножечко видоизменим наше приложение здесь скажем Я хочу создать новую ветку и Давайте тогда сделаем еще одно изменение Перед тем как мы будем создавать по реквест и новую ветку для того чтобы одновременно покажу В общем еще один функционал который позволяет фильтровать на определенные события То есть у нас сейчас есть основная ветка мастер моя задача создать ветку DF и сделать по request из Deva в Мастер и предположим У нас есть workflow например квест Или давайте даже сделаем лучше более приближенно к рабочему варианту Мы возьмем и вернем обратно deployment который у нас был описан причем который сделан Через несколько джогов То есть он сейчас у нас реагирует на пурж Но если у нас будет несколько веток то тогда мы будем запускать этот процесс Когда будет производиться Push вообще в любой ветке Мы хотим делать данный диплоид только в рамках мастера они вам других веток поэтому здесь я хотел показать на этом примере что мы можем делать определенную фильтрацию когда мы говорим что да мы обрабатываем здесь события Push но вообще-то мы можем еще фильтровать по веткам брань час и это будет работать только в том случае если мы что-то заливаем в метку мастер опять же Это должно быть описано в документации Push Да и здесь видите мы описываем Какие ветки нам нужны причем помимо того что мы можем описать название ветки Мы также можем еще описывать паттерны да то есть например добавить здесь Def и там Две звездочки да И тогда все ветки которые соответствуют этому паттерну они также будут входить в список добавлять теги и так далее то есть ну здесь уже как бы детализация под конкретные требования этому реализовали и теперь давайте сделаем новую ветку то есть для этого пропишу гид чекаут минус B допустим назову ее деф Значит мы теперь переключились в ветку Def И кстати это неправильно потому что мы не запушили вот изменения которые мы сделали давайте быстро это сделаем и тепло там запустится этот процесс но во всяком случае Теперь мы можем уже сделать опять вернуться в Теперь мы находимся в Ветке Теперь смотрите Да есть маленький нюанс так как мы здесь идем со старой версии кода То есть тут нет дипломата давайте сделаем гид пул Origin мастер для того чтобы забрать все изменения которые у нас были до этого чтобы сейчас ветка Def и мастер они были синхронизированы Кейн и теперь сделаем какой-нибудь изменения скажем в АП точка JS Мы возьмем и поменяем там добавим 3 восклицательных знака Learn react между прочим нам Тогда придется изменить получается и тесты то есть мы внесли какие-то изменения не принципиально что это конкретно За изменения Давайте протестируем Да что это у нас работает все тесты проходят Значит все окей и дальше мы делаем гид точка git commit допустим Fix текст и делаем гид пуш Origin Dev теперь я перехожу в репозиторий и мы видим что На текущий момент мы находимся в Ветке мастер но также присутствует ветка DF и мы можем сделать Power request он сам предлагает принципе это реализовать но мы можем пойти в Power квесты настырно это делает все равно я сделаю по своему неё по request Ну и дальше я выберу здесь что мы хотим сравнить ветку Def Да и залить ее в Мастер все нажимаю creat Power request там допустим Fix react текст добавлю какое-то описание description так Ну и в принципе я создам сам по request то есть то ради чего вообще все мы это и делали если можем посмотреть что вот что у нас было изменено на принципе больше ничего не трогали и теперь что интересно мы можем перейти в экшены видите у нас запустился еще один workflow который называется фикс ряд текста где мы на самом деле выводили [музыка] события до которые относятся к этому Пури квесту то есть этот forkflow отработал на конкретный Триггер до который мы как раз таки задавали как только был Пури квест создан вот он Action opent потому что мы его открыли и вот собственно говоря есть та информация которая относится к конкретным данным Пури квесту то есть принципе мы можем теперь с этим работать вот та информация про базу и так далее И это то как мы можем кастомизировать принципе на что игнорирует точнее На что реагирует что он игнорирует как Мы это можем фильтровать и так далее да И вот на этих примерах мы это принципе и увидели также Давайте я покажу еще одну фишку касательно этой темы то есть мы начали переключимся в Мастер Все мы теперь находимся в Мастере и я перейду в дипломонд помимо того что мы можем фильтровать Да какие-то ветки на которых запускаются все наши процессы Мы также например можем сделать реже запуск непосредственно в workflow Например если мы что-то меняем понимаем что эти изменения не должны запускать наши процессы то мы можем это сделать с помощью такой настройки как под игнор Вот и в качестве примера здесь укажу что если мы что-то меняем в workflow то Допустим нам не нужно там реагировать Да на это ветхабе то есть мы можем здесь просто указать путь например github warflows и от любые изменения до которые произойдут вот по этому пути они должны быть проигнорированы при запуске автоматического Давайте протестируем и чисто гипотетически [музыка] Да если мы Сейчас переходим в actions то Несмотря на то что был commit у нас при этом не запускается workflow хотя мы находились в Мастере и он реагирует непосредственно на события Push да то есть но так мы за игнорировали вот изменения которые находятся в этой Папке то принципе он его и не запустил поэтому я оставлю это в комментах потому что нам потребуется какие-то автоматизации но тем не менее Также можно реализовывать Окей следующая Тема и как можно еще улучшить данный workflow я хочу вам показать тоже один экшен в github marketplace Давайте допустим так вот перейду в него так Нет не получилось который называется кэш Очень полезная значит свеча которую вы часто увидите как ее используют кэш это тоже от github вендоров да то есть это официальный экшен который позволяет существенно ускорить работу workflow за счет того что например мы можем закошировать определенное количество файлов там папок Ну в общем чего хотим Ну например в нашем случае мы можем вот если мы посмотрим да на этот Fork Flow мы увидим что мы делаем стол а потом мы еще раз делаем стол То есть короче каждый раз на каждом джипе мы делаем установку зависимости и вообще-то их можно было бы закошировать и тогда мы просто сэкономим кучу времени то есть такая идея у него есть Поэтому Давайте попробуем реализовать то есть чтобы использовать данный кэш мы описываем вот его применение название причем третья версия и очень важно чтобы мы его добавили до того как будет появляться то что мы можем кэшировать то здесь я создам новый шаг допустим называю кэш деппенденсис Дальше он будет использовать у нас Action Cash версии 3 и дальше нам нужно будет указать некоторые параметры то здесь мы это уже делаем с помощью настройки будет по сути нам потребуется здесь два из них первый этап то есть Так мы хотим закошировать то что будет установлено в качестве НОД же зависимости то мы просто приписываемся Такой путь он фиксированный для Ubuntu машин слэш npm то есть здесь это все будет храниться и дальше нам необходимо дать какой-то ключ на самом деле это может быть просто обычный строчкой то есть допустим not [музыка] модуль из deps или что-то в этом духе но опять же лучше если этот ключ будет динамический потому что ну например мы в процессе разработки добавим какую-то зависимость в package или там на каком-то этапе да Давай добавим новую зависимость и получается что наш кэш уже будет не валидный потому что его нужно будет обновить то здесь мы должны ориентироваться как бы добавить такой динамический ключ основанный на текущем списке зависимости И на самом деле как говорит документация в github мы можем сделать следующим образом то есть задаем какой-то там статическое имя Если хотим и дальше используем этот Expression который позволяет добавлять динамику именно в workflow и дальше есть специальный метод функция которая называется Хеш файлс и сюда мы Передаем путь такой вот где указываем package lock.json но не Забывая поставить это все в кавычки то есть здесь мы как раз таки описываем да список всех зависимости если что-то меняется в парич Локи то тогда наш кэш уже будет не валидный но во всяком случае мы будем ориентироваться именно на этот ключ то есть здесь мы как бы создали кэш и при этом да то есть я беру теперь копирую чтобы мы могли улучшить Интересно что я написал в Ленте но это не принципиально да то есть чтобы Теперь мы основывались на этом каше и в других джобах мы просто добавляем Ту же самую инструкцию для Значит каждый жобы и это будет один и тот же кэш То есть он шарится между работами и таким образом мы ускорим весь for То есть я его добавляю теперь на каждом этапе перед установкой Ну и теперь давайте посмотрим работает ли это добавляю все гид КАМиТ сам дальше делаю так и теперь давайте смотреть на репозитории То есть я перехожу в экшены Да сейчас нас добавился этот кэш Ну и у нас идет здесь определенная последовательность давайте для того чтобы немножечко ускорить процесс я во-первых покажу как можно Отменить workflow то есть я просто нажимаю здесь концовок Flow в интерфейсе все и он должен быть отменен Я хочу немного показать как можем улучшить вообще конкретно данный workflow Ну заодно покажу еще синтаксиса да то есть допустим вот у нас есть джоба Линт Джо батест и например вот Линт у нас не будет ни от чего зависеть я выбираю здесь нет а Билд Например у нас будет зависеть и от Линта и от теста то есть мы можем как бы тут делать абсолютно любую композицию Как нам угодно опять же быстренько добавлю все изменения в github Change выглядит Push Давайте теперь посмотрим да на экшена этот видите мы отменили поэтому здесь ок и теперь значит вот как выглядит непосредственно теперь workflow да то есть сейчас мы видим что конкретно бьют он будет зависеть уже от двух работ которые выполнятся поэтому мы это видим и в интерфейсе по идее теперь это ускорит наш процесс теперь мы видим что все это выполнилось и мы можем продолжать следующая тема которую я хочу вам показать тоже очень важная она называется матрицы и стратегия Давайте опять же посмотрим на вот на эту работу бьют и подумаем А что еще мы можем здесь сделать То есть да мы запускаем ее на ubuntulatest вот получаем код непосредственно этого репозитория и так далее но здесь по сути Мы бьютим наш проект и было бы неплохо если бы могли посмотреть как он работает на различных версиях но Джес ну скажем там не знаю на 14 на 16 например и как этот проект будет работать на различных операционных системах то есть в общем как нам это реализовать мы на самом деле это можем сделать через следующую настройку мы добавляем Strategy и дальше есть настройка Matrix после чего в матрице мы указываем какие угодно ключи то есть мы сами придумаем для них название Но которые потом мы будем использовать например опять же первая назову скажем нот вершин и например это будет у меня массив состоящий из двух значений опять же вот эту штуку я могу назвать абсолютно как угодно и я сейчас покажу как этим пользоваться то есть Наша задача чтобы мы протестировали бьют этого проекта на 14 и на 16 ноде и допустим на операционной системе скажем Ubuntu litest и например на винде сейчас грубо говоря Мы создали просто переменные Да и список То есть это пока еще не определение того что нам нужно делать теперь Значит в чем прикол этой матрицы в том что вот сейчас например да когда мы запускаем бьют давайте я принесу чуть пониже вот сюда когда мы запускаем бьют и говорим на какой операционной системе Нам необходимо работать у нас здесь фиксированная строка то есть мы работаем на Ubuntu Но если у нас есть Матрица то мы можем здесь использовать Expression и обратиться к специальному объекту Matrix и дальше мы уже Обращаемся к тому ключу который мы придумали То есть если это ос то пусть будет у вас если я назову это operating System то соответственно так будут здесь писать и учитывая что сейчас в ОС У нас есть два значения то вот этот шаг он будет повторяться столько сколько здесь значений есть то есть таким образом будет автоматически прогонять через каждое значение которое мы здесь добавили соответственно то же самое мы можем сделать из версия миноджи с То есть сейчас мы получаем непосредственно код репозитория И как я и говорил но Джес в принципе она заранее установлена уже на всех машинах то есть нам не нужно ее специально устанавливать Однако если мы хотим опять же там поиграться с его версиями то Почему бы нам вручную это не сделать поэтому я добавлю здесь еще один шаг который назову Install not GS Причем я это делаю перед тем как кэшировать какие-то модули значит и здесь Я буду использовать уже готовый actions точно не помню как он называется Давайте посмотрим actions называется setup not Да он должен быть также от github Ну собственно говоря он делает то что и написано то есть мы устанавливаем здесь ноду я копирую Action setup not и мы видим что он идет дальше с параметром будет у него параметр называется Note вершин то есть так и пишем with овуляцию networtion и опять же если мы здесь укажем фиксированную то он установлен только фиксированную версию но так у нас есть Матрица то почему бы нам не использовать Expression и здесь указать Matrix нот вершин опять же вот этот ключ он должен соответствовать тому что мы прописали в матрице но в принципе теперь мы можем протестировать работает ли это делаю классическую схему выглядит пуш Давайте смотреть вот у нас добавилась Матрица И теперь мы видим да что шаг билда у нас уже идет с матрицы то есть мы визуально это можем определить Давайте подождем когда все завершится да И как только Значит у нас выполнили тест и Линт у нас начинает запускаться по сути четыре задачи мы их также видим слева То есть это 4 разных билда и мы видим что один BIOS запускается на Ubuntu latest и это 14 версия но Джес просто параметр 14 Мы то знаем что это notjs то же самое на винде последний и то же самое касательно 16 версии ноды на двух платформах то есть с помощью такого простого параметра Да мы можем сразу же на разных окружениях протестировать как это все будет выглядеть будет ли это работать в случае если нет мы поймем что есть какая-то ошибка и соответственно сможем ее исправить и не сломать провод что довольно таки выгодно на самом деле прошло немного времени и мы видим что действительно теперь на всех платформах бьют успешно было совершен и в общем таким образом это и работает также я хочу дать маленький комментарий что в случае если допустим какой-то из этих элементов матрицы не прошел Ну там например 14 версия ноды на винде например не прошел Все она сломалась будет красненьким показываться все остальные работы они прекратятся чтобы этого не случилось есть еще один параметр Я уже не буду кушать я просто покажу Значит на уровне Да где мы описываем стратегию мы добавляем он Error и ставим его в значение True То есть если вы его добавите туда же если были какие-то ошибки мы все равно продолжим делать свой ID На этом этапе Я предлагаю скопировать значит весь этот диплом И вообще весь этот workflow опять же перенести его в уже продвинутый теплой и отсюда выпилить потому что мы переходим с вами к следующей теме вообще все паркуловые удалю с проекта это сохраним Да чтобы он был и я создам новый workflow удаляю я их только для того чтобы Ну каждый раз не есть ресурсы гитхаба То есть я думаю что вы поняли что если их много то они многое запускаются допустим я назову workflow build .ml Давайте зададим ему какой-нибудь имя например Build и что я хочу вообще вам показать из функционала на примере этого Как мы можем получать доступ до каких-то файлов там статических папок и так далее через опять же всю эту систему Давайте здесь например попрактикуемся я добавлю несколько триггеров для данного workflow например это будет пуш и Пусть это будет workflow диспатч описываем Jobs и все что нам потребуется сделать это собрать в общем-то проект опять же мы знаем как это делается то есть начале Нам необходимо получить код репозитория непосредственно код для этого мы используем actions чекаут собака V3 далее Нам необходимо установить список зависимости здесь мой просто выполняем npm Si опять же потому что присутствует покачалок далее Нам необходимо собрать проект бьют Project здесь Мы выполняем npm Run бьют и мы теперь когда Мы выполняем эту команду Давайте даже повторю мы получаем папочку Build и предположим Наша задача вот на текущий workflow сводится к тому чтобы мы получили доступ до этой папки Потому что сейчас когда бьют происходит значит он просто осуществляется и больше мы ничего с ним не можем делать потому что дальше на серваке все Это ощущается и доступа больше нет например можем получить доступ к билду Либо мы можем получить например какие нам еще нужно до статические файлы скажем тест Report какой-нибудь То есть например Мы хотим все это экспортировать в отдельный файл и скачать как бы отчет о том как прошли тест это то есть много различных вариаций того как это сделать вот я покажу в принципе алгоритм того как это работает со статикой это называется артефакты внутри github actions и мы добавим еще один шаг который будет называться плод артефакт правда здесь я заметил что неправильно сформировал структуру githopections Да потому что мы прописали Название jobe но при этом мы не прописали на чем будет запускаться и мы не прописали что сейчас вообще-то мы перечисляем шаги то есть про это не нужно забывать Итак мы остановились на том что мы загружаем сейчас артефакты артефакты это как раз таки и есть да вот этого статические файлы там папки и прочее и для этого существует отдельный экшен то есть нам не нужно делать вручную он называется оплот артефакт он тоже идет от создателей всей этой экосистемы Вот и в документации обычно довольно таки просто написано как это все использовать да то есть вот мы его добавляем с помощью команды uses actions appload артефакт третьей версии и нам нужно добавить некоторые параметры для него то есть name и Pass с точки зрения пад мы указываем А в каком месте Нам необходимо искать то что мы хотим добавить в артефакт то есть загрузить артефакт Ну это на самом деле Папочка у нас бьют потому что именно сюда мы складываем статику а name здесь мы указываем как этот артефакт будет называться Мы тоже можем указать его Как бьют Но чтобы вы не путались Я назову это Например бьют файлс да то есть это такое локальное имя которое впоследствии мы сможем так или иначе использовать Давайте попробуем это все запушить переходим в экшеном смотрим на оплот артефакт можем перейти прямо посмотреть на процесс того что здесь происходит вот он получает там весь наш код Дальше он уже билдит проект и начинает загружать артефакты Он сказал что все хорошо выполнялось все как бы данный workflow закончен Теперь если мы посмотрим опять же на него то не совсем понятно Окей мы как бы куда-то что-то загрузили А что вообще с этим делать И на самом деле это очень справедливый вопрос потому что одно дело было загрузить артефакты да то есть мы можем теперь потенциально с ними поработать но если мы хотим как-то их загрузить то нужно их еще и получить поэтому берем и исправляем точнее дописываем данный workflow то есть запоминаем да что мы вот этот артефакт положили в Build Files теперь скажем Давайте немножечко поменяю Да вот этот workflow он будет называться Build and deploy условно перемещаюсь до на один уровень с джобами и говорю что здесь у нас будет новый Job который называется deploy он будет зависеть от билда Это должно быть логично Да потому что мы ждем когда у нас появится в принципе сам артефакт дальше мы говорим что он будет запущен на бунту и также описываем стопы а на самом деле здесь будет один всего лишь шаг где мы берем и получаем сбившиный проект и для того чтобы получить его мы опять же используем другой экшен который можем найти в marketplace который называется внезапно download артефакт безусловно Можно перейти и в этот экшен И вероятно он будет работать но видите это было неофициальный от github Зато есть официальный Я бы хотел именно им пользоваться как минимум 10 галочка Да И вот то что нам необходимо прописать для того чтобы он работал и дальше добавить некоторые параметры опять с помощью ключа with где мы указываем название тех артефактов которые мы загрузили Ну в нашем случае это вот это название которое мы кастомное добавляли теперь опять же пушем все изменения делаем гид пуш и переходим опять в экшена у нас запускается новый workflow Мы ждем пока он выполнится после завершения данного workflow Мы видим что у нас теперь появился один артефакт и мы можем на него посмотреть То есть вот он называется бьют файлс его размер я допустим на него нажму и у меня это скачивается как обычный ZIP архив То есть если я попробую его открыть то мы видим что да здесь как раз таки лежит собранный проект то есть весь бьют который мы сделали уже на сервера github и после этого скачали то есть опять же в с точки зрения статики которые можно использовать это различные там тест репорт какие-то билды и так далее которые вот в зависимости от задач вашего проекта Вы можете опять же реализовывать через github actions Окей и у нас осталось последняя тема в рамках данного курса я сделаю по аналогии То есть я бьют Перенесу в sample для того чтобы можно было потом пользоваться и создам новый workflow который назову nv.ml где я хочу показать как в github actions и workflow мы можем работать с инвайрами переменными потому что это очень важная составляющая в принципе для билда и какие здесь есть нюансы В первую очередь задам какое-то имя пусть будет ремонт на какие события у нас будет триггериться значит данный workflow давайте так напишу Да что он пусть он будет ригериться на пуш и на workflow dispatch так запишу только для того чтобы разнообразить синтаксис дальше мы описываем какие-то работы предположим У нас тоже здесь будет бьют и в данном примере мы будем чисто симулировать или эмулировать работу который будет выполняться потому что будем просто выводить в консоли для того чтобы разобраться именно с инвайрами переменными ubuntum latest добавляем степс name допустим Print N и Давайте здесь напишем название что у нас был Билд что мы будем здесь делать допустим в несколько строк будем выводить это какой-нибудь строчку значит это примерный шаблон до того что я хочу сделать и Давайте добавим еще один Job который будет называться например диплой он тоже будет запускаться на бунту latest здесь я буду делать только название собственно говоря этого Степа будет Принт диплой то есть посмотрим на разницу Теперь мы можем естественно работать в данных файлах в том числе и с январями переменным И для этого есть [музыка] специальный ключ Да он так называется NF Где мы можем перечислять те переменные которые можем прямо здесь задать Давайте на текущем этапе я создам Две из них допустим это будет НОД скажем в значение Production и пусть будет другой ключик он будет называться github Secret который пока что временно будет строчка пусть будет 42 Число а теперь для того чтобы нам обратиться и вывести все-таки в консоли эти inwarming переменные мы можем опять же воспользоваться Expression и здесь мы Обращаемся К специальному объекту NF и дальше уже к ключу то есть здесь принципе вот и вся основа этой работы только давайте выведем здесь github секрет И в общем-то тоже самое выведем И для второй Джобс То есть сейчас по идее каждая из джобов должна видеть эти переменные Я предлагаю посмотреть Так и делаем гид Push переходим в экшеном эти работы должны выполняться очень быстро и если вы сталкиваетесь с такой ошибкой что вот эти вот работы они почему-то ну не запускаются он очень долго пишет текст Что мы ждем пока выберем ранера для того чтобы запустить эту работу то с вероятностью 99 процентов Вы как я неправильно написали название какого-то ранера то есть присмотреться здесь сделал ошибку в надписи Ubuntu у меня был случай Ubuntu правильно когда я написал Ubuntu вот так вот и очень долго и не понимал почему же все-таки экшена не запускается то есть Будьте с этим внимательны прописываете их правильно чтобы все работало делюсь опытом что это ошибка довольно таки быстро фиксится Давайте отменим этот Ford Flow мы переходим в экшены и смотрим на исправление То есть сейчас не должно быть проблем Да как видите быстренько все произошло Окей собственно говоря то что я ожидалось Да когда мы в билде выводим инвалируем переменные мы видим и продакшн и 42 Ровно как и в диплои должны увидеть то же самое Production и 42 Окей это Было очевидно что мы можем делать еще с этими инвалидами переменными мы можем их локально задавать Да на каком-то этапе То есть например в диплоид Скажем мы хотим также добавлять NF и например Здесь я скажу что not N у меня будет равняться уже не просто Production а продакшн диплой я знаю что это немножечко иррациональный вариант для практики но тем не менее показать области видимости до которые есть для этих переменных в файле Это хороший пример Это первый шаг и также я хочу объяснить еще тему с секретами потому что смотрите вот сейчас мы как бы задали Да какие-то инвалидные перемены в файле и все как бы хорошо но действительно есть определенные там токены какие-то секретные данные пароли которые Ну не хотелось бы чтобы кто-то увидел а если мы их оставляем прям в workflow то мы же всегда можем перейти в репозиторий так в репозитторий и посмотреть как этот workflow выглядит то есть вот он и все ему видим эти данные и соответственно можем делать что захотим поэтому для того чтобы это было защищено в github есть классная фишка мы можем перейти в сеттинге прям сеттинге самого репозитория и здесь присутствует Такое поле как секрет Нас интересуют секреты которые относятся к экшенам и здесь мы можем добавить новые репозитории секрет задаем ему какой-нибудь имя например диплой секрет это мы сами выбираем здесь будет какое-то значение опять же нам это не важно да сейчас что угодно мы сюда вписываем или обычно какой-то секрет добавляем и вот в чем прикол этих секретов в том что один раз написав Вы больше никогда не сможете его посмотреть нажимаю добавить секрет в этом и заключается прелесть и вот у нас есть deply Secret то есть единственное что мы можем делать с ним это редактировать но опять же редактировать просто новые значения что Передаем либо удалить естественно мы можем добавлять множество секретов для репозитория но в принципе для объяснения подойдет и один То есть мы копируем его название и дальше Вот для этой переменной мы можем указать что мы не фиксированное значение будем здесь поставлять мы будем обращаться к секрет Ну и дальше уже ключ конкретно этого значения Теперь давайте посмотрим что у нас будет показываться в консоли где пуш перехожу в actions вот у нас две работы которые нужно выполнить Так ну и смотрим значит в обиде что у нас показывается у нас показывается продакшн и на месте секрета показываются звездочки То есть github он автоматически понимает что вот этот вот эта переменная Да это значение она у нас совпадает со секретом и его нельзя показывать Даже если мы будем выводить его в консоли то есть не шутил когда говорю что его больше нельзя будет посмотреть Это хорошо что касается диплоя то здесь мы видим что так как мы более локально переопределили энваряминг переменную на уровне именно работы deploy то у нас здесь показываются уже продакшн диплоид то есть вот мы Его изменили ну и соответственно то же самое касается и секретов Они здесь никак не фигурируют и в принципе На этом этапе мы можем теперь завершить данный курс потому что этих знаний вам хватит для того чтобы полностью разбираться в том как работают [музыка] по сути как устроенный github actions Как вы можете их настраивать переопределять вы знаете все базовые и основные концепции которые вы дальше сможете уже использовать на продакшене то есть безусловно тут есть еще про что рассказывать например это создание своих собственных экшенов потому что не только github может их создавать есть большое количество кастомных экшенов которые делают другие разработчики но тем не менее базу которая Вам необходимо понимать относительно данной инфраструктуры Вы теперь знаете и можете применять на своих проектах Вы можете получить все инструкции Исходный код к этому видео в описании к этому видео там будет ссылка на телеграм и Благодарю вас за внимание и за то что вы учились со мной если вам понравился такой контент то можете поддержать лайком поставить комментарий написать Было ли полезно Было ли Понятно будете ли вы такое применять и Желаю успехов