Git для блогу: як я організував автодеплой
Git для блогу: як я організував автодеплой
Копіювати файли вручну після кожної статті — це не DevOps, це страждання. Тому налаштував автодеплой через Git hook: пишу статтю, роблю git push — сайт оновлюється сам.
Як це працює
Схема проста:
- Локально редагую файли
git push vps master— відправляю на сервер- На сервері спрацьовує
post-receivehook - Hook будує Jekyll і копіює файли в
public_html
Налаштування на сервері
Спочатку створюємо bare репозиторій — це спеціальний тип репо без робочої директорії, тільки для зберігання і хуків:
1
2
3
mkdir -p /var/repo/sedunlab.git
cd /var/repo/sedunlab.git
git init --bare
Потім створюємо хук post-receive:
1
nano /var/repo/sedunlab.git/hooks/post-receive
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
GIT_REPO=/var/repo/sedunlab.git
WORK_DIR=/root/sedunlab_deploy
PUBLIC=/home/sedunlab.com/public_html
export PATH="/root/.rbenv/bin:$PATH"
eval "$(rbenv init - bash)"
export BUNDLE_SILENCE_ROOT_WARNING=1
echo "--- Деплой починається ---"
rm -rf $WORK_DIR
git clone $GIT_REPO $WORK_DIR 2>/dev/null
cd $WORK_DIR
bundle install --quiet 2>/dev/null
bundle exec jekyll build --quiet
rm -rf $PUBLIC/*
cp -r _site/* $PUBLIC/
echo "--- Деплой завершено! ---"
Робимо хук виконуваним:
1
chmod +x /var/repo/sedunlab.git/hooks/post-receive
Налаштування на Windows
1
2
3
4
5
6
cd C:/Users/ndsed/sedunlab
git init
git remote add vps root@sedunlab.com:/var/repo/sedunlab.git
git add .
git commit -m "initial commit"
git push vps master
Робочий процес щодня
Тепер мій workflow виглядає так:
1
2
3
4
5
# Написав статтю
git add .
git commit -m "нова стаття про Jekyll"
git push vps master
# Сайт оновився автоматично
Один рядок замість ручного копіювання. Саме так і має бути.
This post is licensed under CC BY 4.0 by the author.