Jump to content
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 2
  • Upvote 3

Recommended Comments

There are no comments to display.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Add a Comment

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...