Страницы

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

воскресенье, 24 ноября 2019 г.

Git для программиста-одиночки


Работаю с небольшим проектом, в моем распоряжении:


Рабочая станция, на которой я пишу код
Тестовый сервер, куда я автоматическим аплоудом загружаю код и смотрю результат
а также запускаю тесты
Боевой сервер, на который я загружаю изменения после тестрирования


Хочу работать через Git чтобы была возможность быстро создавать ветки и переключаться между ними. 

Я хочу работать примерно так:


Пришел отчёт о баге или запрос на добавление функционала
Я создал ветку для этого фикса и переключился в неё
Написал код, периодически загружая его на тестовый сервер чтобы посмотреть что получилось
Код написан, тесты пройдены, делаю коммит и сливаю готовый код в ветку master
Оттуда (желательно автоматически) код забирает боевой сервер.


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


Ответы

Ответ 1



Если я правильно понял, то с git вы пока не знакомы. Git отличается от систем предыдущег поколения своей децентрализованностью, т.е. каждый репозиторий действует сам по себе поэтому вся работа, теоретически, может производиться на одной машине без поднятия каких-либо серверов. После выполнения команды git init (в PHPStorm делается через меню) репозиторий сам создастся в корне проекта в виде папки .git. Она нам еще пригодится. Что до "центрального сервера", то я рекомендую завести аккаунт на bitbucket - эт сервис по хранению и управлению гит-репозиториями, который позволяет заводить любое количество приватных репозиториев. Он нам тоже еще понадобится. Тот воркфлоу, который вы описали, за исключением развертывания и тестов - это практическ копия описания git-flow. git-flow предполагает существование ветки master, в которо лежит продакшен-код, и ветки dev, в которой лежит текущая версия. Для создания новы фич создаются ветки feature/some-name, которые по окончании мерджатся в dev; при фиксе багов создаются ветки hotfix/some-name, которые мерджатся как в dev, так и в master.Все это дело, конечно, уже автоматизировано пакетом gitflow, для которого существует плагин в PHPStorm, благодаря которому все эти действия еще упростятся. С развертыванием есть два (три) пути. Во-первых, гит поддерживает так называемы хуки, которые позволят вам запускать скрипты при различных действиях с репозиторием что позволит вам прицепить рукописные скрипты к каким-то действиям. Но это не очен правильно, так как на каждый коммит у вас будет запускаться этот самый скрипт. В случае если вы завели аккаунт на битбакете, есть альтернативный путь - хуки в самой системе битбакета, которые исполняются при каждой заливке новых коммитов и позволяют сделать HTTP-запрос по определенному URL. Сюда можно прицепить staging и production сервера, заставив их обновляться по подобному запросу. В этом случае придется выписать этим серверам в битбакете по deploy key (самые обычные ssh-ключи), которые будут необходимы для того, чтобы эти сервера могли стянуть свежий код. Однако, по-хорошему, нужен дженкинс, который будет всем этим делом оперировать, иначе конечно, постоянно придется что-то делать вручную. Дженкинс - это сервер постоянно интеграции, который специально предназначен для автоматизации такого рода процессов В этом случае хук с битбакета будет посылатсья на дженкинс, который сам будет фильтроват обновленные ветки и на основании их запускать внутренние проекты. В этом случае надо будет сконфигурировать подключение дженкинса по ssh к серверам и создать два проекта - деплой и запуск тестов на staging-сервере и деплой на production-сервере; первый должен запускаться по хукам и выкатывать самую свежию загруженную ветку, а второй - только по кнопке, либо по обновлению ветки мастер. Если какие-то вещи вы все-таки не знаете, а я подумал обратное, пишите, я дополню ответ.

Ответ 2



Это часть решения проблемы, предложенная автором вопроса, Владимиром Зотовым. Получившееся решение Потратил сутки на эксперименты и чтение документации. В итоге получилось: Рабочая машина с PHPStorm и локальным репозиторием Git Тестовый сервер с папкой проекта и отдельным расшаренным репозиторием Git Боевой сервер с локальным репозиторием Git. Описанный выше воркфлоу реализован (кроме автоматического забора кода на боевой сервер). Получается такая картина: Пришел багрепорт Создаю новую ветку в локальном репозитории на рабочей машине. Пишу в ней код, автоматическ загружая его на тестовый сервер. В папке проекта на тестовом сервере нет репозитория - он размещен отдельно. Загрузил, оттестил код. Делаю коммит в локальной ветке с фиксом. После этого объединяю ветку фикса с веткой мастер. Из ветки мастер делаю push (через PHPStorm) в ветку мастер в репозитории на тестовом сервере Захожу по SSH на боевой сервер и делаю pull в локальный репозиторий (который лежит в одной папке с проектом) с тестового сервера. UPD: Как показала практика гораздо удобнее загружать код на дев сервер не автоматически аплоудом из phpstorm а вот этой утилитой http://dklab.ru/lib/dklab_realsync/. Она п SSH зеркалирует папку проекта на рабочей станции и на дев.сервере. Удобно тем, что при переключении между ветками на рабочей станции - на деве сразу видишь результат. Рекомендую. UPD: Как показала практика - нет особого смысла самому держать центральный репозиторий на дев сервере например - для этого отлично подходит bitbucket.

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

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