Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Построение эффективной CI/CD инфраструктуры с нуля начинающему devops инженеру

#c_sharp #angular2 #docker #непрерывная_интеграция #devops


Предыстория.

На работе встала задача, наше новое приложение, разработанное на asp.net core и Angular
по серьёзному развернуть на серверах компании. Инженеров devops нет и не предвидится,
поэтому мне как старшему разработчику придётся осваивать и это направление т.к. команда
и так не большая - всего 4 человека. В общем, проблема возникла на стадии планирования. 

Сейчас в компании используются две независимые гальванически не связанные сети для
интернета и для внутренней подсети. Вся инфраструктура (1с и прочее) находятся именно
в локальной сети без доступа из вне. Разработчики напротив сидят именно в интернетовском
сегменте. 

Обдумывая инфраструктуру серверов для публикации и тестирования проекта я обдумывал
использовать Docker.(Само приложение будет использовать linux в качестве серверной
платформы(nginx для angular, postgresql - db, api на .net core). 

Небольшая выжимка информации.


Windows; Visual studio 2017 для разработки API; Visual studio code для Angular; GitLab
на внутренем интернет сервере;
API написано с использованием ASP.NET Core 2; Клиент на Angular 4; DB - postgresql;
Разработчики находятся в отдельной сети от места развертывания приложения;
Сервера с приложением будут в локальной сети без доступа к интернету;
В качестве базовой платформы будет использоваться ProxMox в локальной сети;


Структура получившаяся на мой взгляд.



Вот только есть несколько проблем (собственно вопросов):


Обновление пакетов NPM(в качестве пакетного менеджера используется Yarn) и NuGet.
Добавление новых пакетов.  Вроде, как и для nuget и для Yarn можно делать offline зеркала,
но как поддерживать в них актуальность? И есть ли возможность обновлять/добавлять пакеты
используя Git? м.б. кто-то сталкивался с этим?
Есть ли вообще смысл от Гипервизора и виртуальных машин? Или в данной ситуации лучше
на одной физической машине развернуть всё? Есть ли плюс поддержки виртуальных машин
(в будущем планировалось объединить несколько серверов в кластер и добавить репликацию
с резервированием)?
Возможно ли что я иду в неправильном направлении и все мои идеи и мысли в корне не
верны? Будет ли мне потом мучительно больно при работе со всем этим? :)
Где вообще можно почитать об организации такой структуры с нуля?  


Возможно кто-то подскажет как лучше организовать весь этот процесс CI/CD. Для меня
это первый опыт в этом направлении и всё хочется сделать правильно (на сколько это
возможно)) ведь мне самому придётся работать со всей этой структурой и как разработчику
и как devops.
    


Ответы

Ответ 1



Обновление пакетов NPM(в качестве пакетного менеджера используется Yarn) и NuGet. Добавление новых пакетов. Вроде, как и для nuget и для Yarn можно делать offline зеркала, но как поддерживать в них актуальность? И есть ли возможность обновлять/добавлять пакеты используя Git? м.б. кто-то сталкивался с этим? Большинство пакетных менеджеров могу скачивать репозитории по ssh / git. yarn install git+ssh://git@github.com//.git. С nuget видимо только репозитории. Пока это не проблема, а будущая возможная оптимизация, по уменьшению трафика и увеличению скорости билдов. Спокойно игнорируем на этом этапе. Есть ли вообще смысл от Гипервизора и виртуальных машин? Или в данной ситуации лучше на одной физической машине развернуть всё? Есть ли плюс поддержки виртуальных машин (в будущем планировалось объединить несколько серверов в кластер и добавить репликацию с резервированием)? Смысл есть - изоляция, но и overhead. Как плюс gold image, в котором уже все готово, нужно только залить весь стек (docker stack deploy). Вполне можно ужиться и на одном, более рисковый путь. Для кластера - docker-swarm + glusterfs / edge fs / etc (для overlay volumes). Возможно ли что я иду в неправильном направлении и все мои идеи и мысли в корне не верны? Будет ли мне потом мучительно больно при работе со всем этим? :) Направление верное. Мучительно ли? - Да, как и всё новое. Мой пример - docker-swarm около месяца (две из них auto letsencrypt + nginx). Просто потому что выбрал инструмент, который знал. После на Traefik сделал за два дня. Автоматизировать, нужно постепенно. Сделать CI. Deploy ручной, но c одной командой. По началу даже так ускорится процесс (Fail Fast). Ни слова не упомянули о конфигурационной менеджменте. Тут Ansible в помощь. По ссылке мой опыт автоматизации деплоя на swarm cluster, а так же структура, которая позволит быстро добавить новые сервисы и задеплоить. Конечно есть нюансы, типа нельзя воспользоваться deploy script, пока нету registry. Или workflow c множеством docker-compose.*.yml файлов. Плюс полная докеризация (как пример) или DevSecOps. Где вообще можно почитать об организации такой структуры с нуля? Подписаться на DevOps рассылки, настроить google alerts по темам (docker, container, etc). Повышать кругозор. Накладывать свои знания на свою реальность. И много экспериментировать.

Комментариев нет:

Отправить комментарий