git GIT_WORK_TREE удаленное развертывание хука после получения - PullRequest
4 голосов
/ 14 ноября 2011

Я пытаюсь использовать этот пост-приемный крюк для обновления моего живого сервера

GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Этот хук находится на удаленном репозитории, и я хотел бы, чтобы живое дерево работало на другом сервере.

Как мне настроить это так, чтобы при срабатывании ловушки он проверял файлы на работающем сервере, передавал ли он по ssh с удаленного сервера на работающий сервер? Где я могу определить это?

Вот что я пытаюсь настроить

http://www.dejaaugustine.com/2011/05/leveraging-git-as-a-full-fledged-web-development-tool/

но вживую и тестирование сидят на отдельных серверах с голым репо, но вместо использования git pull я собирался использовать git checkout -f.

Ответы [ 3 ]

3 голосов
/ 12 мая 2015

Следующее решение обновляет базу кода живого сервера с помощью кода из чистого репо на другом сервере.Это решение не использует scp и не копирует файлы для перезаписи на работающем сервере, потому что мы хотим избежать перезаписи всего каталога (с помощью git мы можем выбрать то, что хотим обновить).

Допущения :

  • Вы отправляете свой код в пустой репозиторий на тестовом / промежуточном сервере (или это может быть только сервер для размещения вашего «централизованного» репо)
  • ВыВы хотите обновить свой сервер в реальном времени с помощью кода в этом репо
  • Ваш реальный сервер находится на другом сервере, чем ваш репо

На реальном сервере:

  • Настройка не-пустого репозитория git, в котором размещаются живые файлы: cd /var/www/www.yoursite.com && git init
  • С этого живого сервера убедитесь, что у вас есть ssh-доступ к серверу, на котором вашпустой репозиторий, используя ssh-ключи (здесь не рассматриваются)
  • Добавьте «централизованное» репо: git remote add origin git@testserverip:/path/to/repo.git
  • Теперь, каждый раз, когда вы хотите обновить базу кода живого сервера, выможно запустить git fetch origin, а затем git merge

Так как этоНа сервере вы обычно не хотите, чтобы конфликты слияний вызывали проблемы.Если вас не волнует потеря изменений на живом сервере (потому что вы, вероятно, никогда не измените ничего важного на живом сервере), вы можете использовать git merge -m 'Overwriting live server' -s recursive -X theirs origin/active-branch-on-live-server

Типичный сценарий - наличие других файлов (tempфайлы, измененные пользователем файлы и т. д.) на живом сервере, который вы не хотите перезаписывать).Убедитесь, что добавили все эти файлы / каталоги в ваш файл .gitignore и убедитесь, что они не добавлены git add.Таким образом, они не будут затронуты, когда код будет извлечен из вашего централизованного репо.

Если вы хотите, чтобы эта настройка была для меня более автоматической, создайте скрипт bash на работающем сервере:

git fetch origin
git merge -m 'Overwriting live server' -s recursive -X theirs origin/active-branch-on-live-server

Сделать этот скрипт как исполняемый скрипт bash (здесь не рассматривается).Теперь вы можете вызвать этот скрипт из ловушечного скрипта на «централизованном» сервере, чтобы живой сервер обновлялся каждый раз, когда вы нажимаете свой код.

В «централизованном» репо / тесте/ staging server:

(у вас уже должно быть настроено голое репо здесь, если вы его не создадите).

В вашем bare-repo.git / hooks / create / editфайл post-receive, чтобы живой сервер запускал сценарий, созданный выше, когда код отправляется в пустое хранилище:

#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)

    # Use this if-sentence to only update live server if branch is the wanted branch, e.g. master or stable
    if [[ "stable" == "$branch" ]]; then
            # Fetch this branch from live-server
            ssh root@ip-to-live-server '/path/to/script-created-above'
    fi
done

Убедитесь, что у пользователя git на сервере, на котором размещено ваше хранилище с открытым хранилищемдоступ к вашему живому серверу через ssh-ключи, так что ssh в приведенном выше сценарии работает.

Это схематический обзор.Подробности можно найти в других местах:

0 голосов
/ 25 мая 2013

Вы можете настроить пустой репозиторий на живых / тестовых серверах и отправить их с помощью перехвата пост-получения из основного исходного репозитория.Затем снова используйте ловушку post-receive, чтобы оформить заказ в веб-каталоге.

Или используйте rsync для основного репозитория origin для живых / тестовых серверов.(Будьте осторожны с задержкой во времени.)

0 голосов
/ 14 ноября 2011

Вам потребуется обновить хук после получения, чтобы получить файлы из папки извлечения на вашем git-сервере и отправить их на ваш действующий сервер.

GIT_WORK_TREE=/home/temp git checkout -f
scp -r /home/temp user@liveserver:/var/www/www.example.org
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...