Премитивное авторазвертывание с помощью git
Описание
Собственно цель данной статьи - поведать об одном из самых простых способов развертывания на сервере с помощью git'а и его хуков.
Предисловие: данная статья предполагает что Вы понимаете что такое VCS, в часности гит и уже им пользовались
Развертывание проходит в 3 этапа
- Пуш в репозиторий размещенный на нашем сервере
- Тригер хука на сервере
- Выволнение нужного нам скрипта, в данном случае чекаут из репозитория в нужную нам папку
Статья на примере работы с Centos 7 в качестве продакшн сервера и Windows 10 в качестве дев-машины.
Авторизироваться будем по ssh, и для начала нужно сгенерировать ssh ключ. Сгенерировать его можно, к примеру, у тилитой ssh-keygen, которая идет в составе git для windows
Из CMD выполняем:
ssh-keygen -t rsa
Следуем инструкциям (вас спросят куда положить ключ, можете просто нажать enter, ключ будет сохранен в C:\Users\username\.ssh), устаналиваем пароль, получаем ключ, файл будет называться примерно так id_rsa.pub
Далее нужно настроить гит репозиторий на сервере.
Устаналиваем git
$ yum install -y git
Создаем гит юзера, для ssh авторизации, указываем пароль
$ sudo adduser git
$ sudo passwd git
создаем папку для ssh ключей
$ su git
$ cd
$ mkdir .ssh
Скопируйте на сервер (через фтп или другим удобным фам способом) ранее сгенерированый паблик ключ, к примеру в папку tmp, в итоге получаем /tmp/id_rsa.pub
Добавляем этот ключ в список доверенных
$ cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Переходим к созданию гит репозитория, к примеру в папке /home/git
$ cd /home/git
$ mkdir project.git
$ cd project.git
$ git --bare init
project.git - можете назвать как угодно.
Длее нужно создать хук в папке /home/git/project.git/hooks
Создаем файл post-receive с содиржанием
#!/bin/bash
echo 'post-receive execute start' >> hooks.log
TARGET="/home/myproject"
GIT_DIR="/home/project.git"
BRANCH="master"
while read oldrev newrev ref
do
# only checking out the master (or whatever branch you would like to deploy)
if [[ $ref = refs/heads/"$BRANCH" ]];
then
echo "Ref $ref received. Deploying ${BRANCH} branch to production..." >> hooks.log
git --work-tree="$TARGET" --git-dir="$GIT_DIR" checkout -f
echo "Deploying done" >> hooks.log
else
echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server." >> hooks.log
fi
done
TARGET - путь к папке в которую будет происходить копирование из репозитория
GIT_DIR - путь к папке с гит репозиторием
BRANCH - ветка из которой будем забирать
Настройте данные переменные под себя.
Репозиторий готов, возвращаемся на нашу дев-машину, и создаем из папки с проектом локальный репозиторий. Это можно сделать и спомощью CMD или любой програмы для управления гит (к примеру я пользуюсь SourceTree)
Выполняем в CMD
cd /d D:\path\to\project
git init
path\to\project соотвественно меняете на путь к папке с вашим проектом.
Комитим изменения, подключаем удаленный репозиторий на сервере и пушим. (если вы создали репозиторий в пустой папке, скопируйте в нее файлы вашего проекта)
git add .
git commit -m 'initial'
git remote add origin git@myserver.com:/home/git/project.git
git push origin master
myserver.com - домен или ИП адрес вашего сервера.
Гит спросит пароль от юзера, вводим пароль который указывали при его создании
После пуша на удаленном сервере выполнится хук и файлы будут скопированы в папку для развертывания.
- 2
- 2
- 3
Рекомендуемые комментарии
Комментариев нет
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти