Изначально выкладывал проект вручную и запускал через pm2 скрипты. После чего посмотрел курс по Docker, Swarm, Ansible, чтобы создать контейнеры, сделать кластеры серверов и автоматизировать настройку. Ещё до этого в в другом курсе увидел, как через Git Actions можно собирать докер и публиковать его на гитхабовский registry.
Ещё не полное, но есть понимание некоторых инструментов для деплоя и создания CI/CD подхода. Сейчас хотел бы определиться со стеком для девопса и переписать свой проект на такой системе. Понимаю, что вариантов и инструментов есть много, но тем не менее я бы хотел вначале расписать своё представление и чтобы вы мне предложили 2 варианта:
- упрощенный
- продвинутый
Или просто рабочий адекватный вариант.
Из инструментов есть:
1. Для хранения кода можно использовать Git, Gitlab
2. Инструменты для CI/CD: Gitlab, Jenkins, Travis, GitHub Actions только для CI
3. Контейнеризация: Docker + Swarm, Kubernates
4. Для конфигурации и управления кода: Ansible, Puppet, Chef, Terraform
На этом
видео показан упрощенный метод, при котором через GitHub Actions в среде прогроняются линтинг, тесты и выкладывается код. Для выкладки автор использова Netlify, который при изменение мастер ветки пересобирает проект и запускает его.
* Здесь не используется докер, и атоматиизация на сервер происходит по средством самого сервиса, видео довольно ознакомительное, но всё же задачу ci, cd решает.
Если у меня "комплексный" проект, где есть апи бэк, клиент, отдельно админка и микросервис для обработки фотографий. То что мне можете посоветовать для настройки CI/CD. На основе текущих знаний я могу собрать докер образ и напиcать playbook, чтобы запустить настройку на серверах. Но я не знаю где лучше хостить докер образ, и мне нужно каждый раз запускать вручную playbook, чтобы произвести настройку и это в отрыве от линтинга, теста и тригера на новые коммиты.
Как настроить всё автоматически:
- При коммите, чтобы происходила проверка линтинга, тестов
- Сборка и выкладка докер образа на Registry, где лучше хранить
- После собраннового нового образа докера - он подтягивался на тестовый сервер и запускался
- А через какое то время на продакшен сервере пересобирался
Для тренировочных целей, я так понимаю, что можно обойтись и виртуальными машинами. А потом когда уже все сконфигурирую, то можно купить сервера на каком то облачном сервера и там уже всё поднять.
Как вы могли заметить, что представления есть, но отрывками без картины полного пайплайна. Поэтому буду Вам благодарен, чтобы вы мне написали краткий план. Какие инструменты можно использовать в связке и какую то задачу из этапов сборки и выкладки они будут решать?
Я пока примерно представляю, что буду коммитить в Git, Jenkins будет хуком увидит изменения, собирать проект и будет выкладывать его на DockerHub и потом запустит Ansible скрипт, чтобы образ выложить на тестовый сервер и продакшн потом.
И альтернативным вариантом коммтить на гитлаб, Gitlub будет собирать проект, выкладывать докер образ на своём поднятом сервере, также можно сделать ? и потом также будет запускать Playbook скрипт для выкладки на сервера.
Но это я лишь примерно представляю, так как не использовал эти инструменты, то не знаю как там хуки, сборки осущевствляются и их совместное использование с Ansible.
P.S На работе используют Gitlab, но там без теста и в целом организация, как мне кажется не самая лучшая. Но я не против и на Gitlab это всё настроить, просто пока в целом интересуюсь, как лучше.