Назад | Перейти на главную страницу

Автоматизируйте git-pull, застрял с брелком

Я хотел бы создать задание cron для автоматического запуска git-pull каждую минуту. Проблема в том, что мое репо является частным, мне пришлось создать ключи в моей системе (Ubuntu Server 12.04). Я установил связку ключей, и теперь ssh-agent не позволяет системе каждый раз запрашивать у меня парольную фразу. Проблема в том, что он не работает из crontab! Почему из оболочки это работает, а из crontab мне задают кодовую фразу?

В вашем сценарии вы делаете $(eval ssh-agent), а затем ssh-add <private_key>?

Для проверки выполните ssh-add -l перед выполнением git pull, чтобы убедиться, что ваши ключи находятся там, где они должны быть.

[править] Попробуйте создать такой сценарий:

#!/bin/bash
set -e 
cd /var/www/GITREPO 
eval $(ssh-agent) 
ssh-add /home/multiformeingegno/.ssh/id_rsa
ssh-add -l
git pull

лучше, чем cronjob, я предлагаю скрипт хуков / пост-приема:

Во-первых, в моем .bashrc:

[ -x /usr/bin/keychain ] && /usr/bin/keychain ~/.ssh/id_rsa || echo "Missing keychain pkg..."
[ -f ~/.keychain/$(hostname)-sh ] && source ~/.keychain/$(hostname)-sh

Который запрашивает парольную фразу при первом входе в систему (необходимо) для регистрации ss-agent связки ключей, как вы знаете.

Затем в чистом репозитории: /path/to/bare/repo.git/hooks/post-receive:

#!/bin/bash
ssh <host> sh << EOF #I launch sh here for less verbosity on terminal login
. ~/.keychain/\$(hostname)-sh
cd /path/to/cloned/repo.git
unset GIT_DIR
git pull
EOF

не забывайте:

chmod +x /path/to/bare/repo.git/hooks/post-receive

таким образом, из моего девелоперского клона чистого репозитория производственный репозиторий обновляется автоматически.