Sign in to follow this  

Премитивное авторазвертывание с помощью git


Description

Один из простых способов авторазвертывания с помощью 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 - домен или ИП адрес вашего сервера.

Гит спросит пароль от юзера, вводим пароль который указывали при его создании

После пуша на удаленном сервере выполнится хук и файлы будут скопированы в папку для развертывания.

  • Like 2
  • Haha 1
  • Upvote 2

Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now