Я пытаюсь найти способ автоматического развертывания приложений PHP для внутренней сети моей компании с помощью GitLab, но пока не уверен, что варианты, которые я нашел в Интернете, сработают.
VM1: Удаленный Git-сервер, который использует GitLab для администрирования репозиториев проектов.
VM2: Сервер разработки. Каждый проект имеет свой собственный сервер разработки.
VM3: Производственный сервер. У каждого проекта тоже есть свои.
Разработчики: Каждый разработчик использует бродячую коробку, основанную на сервере разработки проекта.
Всякий раз, когда разработчик проталкивает его в ветку разработки, ловушка на удаленном сервере должна обновить дерево сервера разработки с последним коммитом в этой ветке.
То же самое должно происходить при обновлении главной ветви, но оно должно обновлять дерево производственного сервера.
Однако, поскольку мы используем Laravel, мы должны запустить несколько дополнительных консольных команд, используя Artisan, в зависимости от каждого случая.
Мы следуем модели ветвления Git Винсента Дриссена.
Я знаю, что GitLab использует Web Hooks, но я не уверен, что это сработает в этом случае, поскольку мне нужно получить доступ к пользовательскому URL, это звучит не очень безопасно, но если это единственное решение, я могу написать скрипт для обработки только этого.
Другое возможное решение — использовать Jenkins, но я не эксперт и пока не знаю, подходит ли Jenkins для моего случая, поскольку я пока не использую модульные тесты.
Ребята, вы реализовали решение, которое может помочь в моем случае? Кто-нибудь может предложить простой и элегантный способ сделать это?
Спасибо, парни! Приятного вам
Мы делаем это следующим образом:
Разработчики извлекают все ветки Git и столько веток, сколько они хотят / нуждаются локально (Debian в VM Ware на Mac)
Все ветки переносятся на dev-сервер всякий раз, когда изменения передаются в Git. Они доступны в feature-x.dev.domain.com, feature-y.dev.domain.com и т. Д. И работают с базой данных dev.
Ветви выпусков вручную проверяются в действующей системе для тестирования, доступны на release-x.test.domain.com и т. Д. Для действующей базы данных (если это возможно, в зависимости от миграций).
Мы полуавтоматизировали это, используя собственные сценарии.
Изменения в базе данных производятся вручную, учитывая чувствительность их характера. Тем не менее, мы не думаем об этом, после привыкания к миграции, и просто не забываем отметить изменения. Мы находим хорошую поддержку, локально клонируя базы данных для каждой ветви, которая нуждается в изменениях. Автоматическое сравнение схем помогает быстро, если изменения в файле миграции были забыты.
(Второй пункт является наиболее продуктивным: мгновенный тест на платформе dev доступен каждому, как только будет запущен первый коммит новой ветви)
Я хотел бы предложить, чтобы все было просто и работать с Git, крючки и удаленные репозитории.
Вытащить тяжелые орудия, такие как Дженкинс или Гитлаб, для этой задачи может быть слишком много.
Я вижу ваш запрос следующим образом: «git after push и / или git after merge: push to remote repo».
Вы можете настроить «голые» удаленные репозитории — один для «dev-stage», другой для «production-stage».
Их единственная цель — получать толчки.
Каждый разработчик работает над своей веткой возможностей, основанной на ветке разработки.
Когда ветвь возможностей готова, она возвращается к основной ветке разработки.
Оба запускают ловушку «post merge» или «post-receive», которые исполняют скрипт.
Выполненный скрипт может делать все что угодно.
(Тот же подход для производства: когда у dev-ветви достаточно новых возможностей, она объединяется с веткой prod — запускает событие слияния — сценарии …)
Здесь вы хотите две вещи:
Вы хотите подтолкнуть конкретную ветку к определенному удаленному репо.
Чтобы сделать это, вы должны найти конкретную ветку в вашем скрипте хука.
Это сложно, но решаемо, смотрите: https://stackoverflow.com/a/13057643/1163786 (написание «git post-receive hook» для работы с конкретной веткой)
Вы хотите выполнить дополнительные шаги для настройки / настройки, такие как ремесленник и т. Д.
Вы можете добавить эти шаги напрямую или как триггеры к скрипту подключения.
Я думаю, что этот запрос связан с внутренним и внешним развертыванием через git.
Вы также можете найти учебники, такие как «внедрение с помощью git», которые могут быть полезны.
Например: http://ryanflorence.com/deploying-websites-with-a-tiny-git-hook/
Если вы предпочитаете не усложнять ситуацию и не возражаете против использования платных сторонних опций, воспользуйтесь одним из них:
Кроме того, если вы хотите перейти к интегрированному решению, я не использовал лучше, чем Beanstalk.