Автодеплой на github

Admin Bash (Unix), GIT, Linux Обсудить

Настройка автоматической заливки на GIT файлов с сервера.

Часть мануала взята из статьи настройки GIT между своим сервером и компьютером.

Устанавливаем git на сервер

Для начала устанавливаем нужный репозиторий с сайта github.com к себе на сервер.

Узнаём установлен ли GIT, проверив его версию:

git --version

Заходим в директорию, куда должен скачаться гит репозиторий:

cd www

Устанавливаем удалённый репозиторий:

git clone git@github.com:user-name/ploshadka-net.git

Если возникла ошибка:

Cloning into ‘ploshadka.net’…
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.

Это означает, что нет SSH ключа для общения между сайтом github и вашим сервером. Для исправления создаём ключ и привязываем его.

Заново пробуем склонировать репозиторий

git clone git@github.com:user-name/ploshadka-net.git

Успешный процесс:

Cloning into ‘name-of-repository’…
remote: Enumerating objects: 407, done.
remote: Counting objects: 100% (407/407), done.
remote: Compressing objects: 100% (263/263), done.
remote: Total 281904 (delta 255), reused 222 (delta 143), pack-reused 281497
Receiving objects: 100% (281904/281904), 373.69 MiB | 1.82 MiB/s, done.
Resolving deltas: 100% (208060/208060), done.
Checking out files: 100% (20185/20185), done.

Создаём локальную ветку от master

Создаём локальную ветку через которую будет работать наш скрипт.

После отправки первого коммита, возникнет сообщение:

*** Please tell me who you are.

Run

git config —global user.email «you@example.com»
git config —global user.name «Your Name»

to set your account’s default identity.
Omit —global to set the identity only in this repository.

Отправляем

git config --global user.name "Dev Server"

И любой свой эмейл

git config --global user.email "test@gmail.com"

Проблема с правами доступа

Ошибка:

error: insufficient permission for adding an object to repository database .git/objects

Или такая:

git pull
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 27 (delta 24), reused 27 (delta 24), pack-reused 0
error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed

Если возникают подобные ошибки, значит они связаны с правами доступа. Заходим в папку git/objects и смотрим права доступа:

cd .git/objects
ls -al

Назначаем на всю папку права нужного нам пользователя.

sudo chown -R dev:dev .git

Скрипт автодеплоя на github

Для автодеплоя на github нам понадобится bash файл с обычными командами GIT.

Например, если нужно отправить какие-то файлы, попадающие на сервер:

#!/bin/bash
# Переходим в категорию GIT
cd '/home/dev/www'

# Отправляем изменения в ветку dev
git checkout dev
git add -A
git commit -m "update dev"
git push

Или если нужно получить эти файлы на сервер:

#!/bin/bash
# Переходим в категорию GIT
cd '/home/dev/www'

# Загружаем данные из ветки dev
git checkout dev
git pull

Или использовать более сложный скрипт.

На сам файл ставим права на выполнение, иначе он не будет запускаться из cron:

chmod +x bash.sh

Заносим задание в cron

Описание процесса настройки задачи для cron.

Запускаем cron, например, каждые 5 минут.

*/5 * * * * dev sh /home/dev/bash-file

English Query (запросы по теме на английском языке)

autodeploy on github

GIT auto-deploy

Привет. Ты находишься на моём сайте. Я разработчик. Здесь я делюсь своими наработками и знаниями. Спрашивай в комментариях, если тебе что-то не понятно или пиши, если есть что добавить.

Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:

Добавить комментарий

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи: "Автодеплой на github".

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Если вам нужно добавить участок кода ставьте его между тегами <code></code>