С чего начинается CI?

Имеется небольшой стартап, проект PHP + MySQL

3 девелопера
1 админ
Команда распределенная

3 самые дешевые машинки в облаке DigitalOcean
1. Zabbix
2. Nginx + PHP-FPM + Redis (php сессии)
3. MySQL + Sphinx

Сейчас разработка идет таким образом

Каждый программист кодит на своем ноуте в удобном ему блокноте (far, xcode, notepad++), копирует файлы на сервер с тестовым доменном потом, в какой-то момент, более ли менее фиксируем версию, делаем копию рабочего сервера, и переносим на него изменения с тестового
Без инструментальных средств!

в общем мракобесие полное

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

Но вопрос, а с чего это начать делать?
Как это сделать так чтобы это было удобно разработчикам?
Как провести эту интеграцию максимально безболезненно и прозрачно для них?

Как вообще выглядит жизненный цикл разработки, для такого маленького пока проекта с использованием вышеописанных инструментов?

Поделить своим опытом внедрения подобных инструментов и как выглядит это "жизненный цикл" у вас.
  • Вопрос задан
  • 4235 просмотров
Пригласить эксперта
Ответы на вопрос 6
akubintsev
@akubintsev
Опытный backend разработчик
CI - это автоматизированная сборка проекта на основе версионного контроля и прогон тестов.

Собственно, начинать надо с задачи реализации деплоя.
Деплой сделать - задача нетривиальная. Есть для этого разные инструменты и универсального решения нет. Отладить процедуру деплоя нужно для сборок в CI и для продакшена/стейджа.
Лично я для своего последнего маленького проекта для выкладки в продакшн выбрал deploybot.com - в принципе всё, что нужно есть, в том числе и хорошая интеграция с DigitalOcean.

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

Выкладку на продакшн/стейдж можно настроить по-разному. Например по коммиту в специальную ветку, по ключевым словам в коммите или вообще вручную. На прод однозначно стоит делать выкладку вручную.

А, еще один немаловажный момент. Для успешного функционирования этого всего дела нужно внедрить версионирование схемы БД и фикстуры (для CI).

Жизненный цикл у нас был такой. Тимлид определяет некий не большой, но и не очень маленький набор фич, которые должны попасть в новую версию приложения. Все тикеты связаны с версиями. И поэтому может случится так, что даже готовую фичу он определит в другую версию продукта.
Каждая готовящаяся к релизу версия получает свою ветку в git и там делается мердж нужных коммитов с фичами. Каждый коммит автоматически тестируется в CI.
Когда все фичи сделаны и коммиты слиты, то можно залить на стейдж сервер и погонять вживую версию в условиях близких к боевым. И наконец, если всё хорошо, то делается деплой на продакшн.
Ответ написан
Комментировать
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
однозначно начните с GIT. и очень советую посмотреть статью про модель ветвления в гит - дабы не изобретать велосипед.
Ответ написан
Комментировать
comm1x
@comm1x
Web-developer
Для внедрения CI последовательность достаточно проста:
1. VCS. Для начала внедрите git, не обязательно сложности с gitlab. Для 3 человек хватит и приватного репозитория на bitbucket.
2. Приемочные тесты. Берем фреймворк для тестирования (я люблю Codeception, но их много и других), и напишите пару приемочных тестов на критические части (оплата, регистрация напр.).
3. Юнит-тесты. Покройте юнит-тестами основные части проекта (для первой итерации хватит и 5-10% покрытия кода).
4. Автоматизируем. Определяемся с CI, настраиваем ее, настраиваем хуки репозитория и уведомления о success/fail-билдах по почтам разработчиков.

Коротко можно описать так: должен быть гит, и должны быть тесты.
Теперь до непрерывного деплоя рукой подать. Скорее всего, когда вы до этого дойдете, вы уже будете примерно представлять как лучше организовать этот процесс, потому что здесь вариантов великое множество. Начиная от самописных деплой-скриптов и готовых deploy software типа Capistrano, заканчивая разверткой и подменой бэкендов и сменой docker-контейнеров.
Ответ написан
Комментировать
rutaka_n
@rutaka_n
softwere engineer
Jenkins-ci
Ответ написан
Комментировать
ColCh
@ColCh
Веб разработчик
Gitlab CI очень неплохая и довольно простая для изучения. А ещё она бесплатная! Если у вас есть аккаунт на Gitlab, то и Gitlab CI вы уже можете начать пользоваться.
Ответ написан
Комментировать
@vGrabko99
html, css, js, php, golang, mysql
Крутые у вас программисты что не знают как удобнее сделать версиность. А вместо сессий используйте jwt.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы