Для автоматического создания резервной копии всех репозиториев в GitHub git и shh должны уже быть настроены и уметь работать с GitHub.
Генерируем api‑key он же personal access tokens
Идет в GitHub и переходим по пути
Домашняястраница GitHub -> Settings -> Developer settings ->Personal access token -> Fine-grained tokens -> Generate new token
Repository access - выбираем “All repositories”. Так как будем делать бэкапы не только на публичные, но и на приватные репозитории.
В Repository permissions необходимо выбрать только один пункт “Metadata” и установить его в Read-only
Имя токена, его описание и срок годности - на своё усмотрение.
Далее обязательно копируем токен и сохраняем его. Больше его не покажут. В противном случае придется повторить процедуру.
Можно не закрывать вкладку и вставить его сразу в скрипт на следующем шаге.
Подготавливаем каталог и файлы
В качестве примера возьмем каталог “/home/github”
Тут создаем файл “github_backuper.sh” и вставляем:
#!/bin/bash
API_TOKEN=""
BACKUP_DIR=""
PAGE=1
while : ; do
REPOS=$(curl -s -H "Authorization: Bearer $API_TOKEN" \
"https://api.github.com/user/repos?per_page=100&page=$PAGE&affiliation=owner")
COUNT=$(echo "$REPOS" | grep -o '"ssh_url"' | wc -l)
[ "$COUNT" -eq 0 ] && break
echo "$REPOS" | grep '"ssh_url"' | awk -F'"' '{print $4}' | while read -r SSH_URL; do
SSH_URL=$(echo "$SSH_URL" | sed 's/github\.com/github/')
REPO_NAME=$(basename "$SSH_URL" .git)
REPO_PATH="$BACKUP_DIR/$REPO_NAME"
if [ -d "$REPO_PATH/.git" ]; then
git -C "$REPO_PATH" pull --quiet
else
git clone --quiet "$SSH_URL" "$REPO_PATH"
fi
done
PAGE=$((PAGE + 1))
done
Настраиваем планировщик cron
Следующим шагом запустим скрипт с помощью планировщика cron.
В /etc/crontab необходимо скорректировать несколько строк.
В переменную PATH добавить наш каталог для хранения (добавлять следует после символа “:”).
В нашем случае будет выглядеть вот так
PATH=/bin:/sbin:/home/github
Затем добавляем расписание в конец файла.
Для создания бэкапов каждый день в 00:00 добавим строку
00 00 * * * user /home/github/github_backuper.sh >> /home/github/log_github_backuper.log
Участок строки » /home/github/log_github_backuper.log нужен для логированияработы скрипта. Если эта информация не требуется то можно не писать.
user - пользователь из под которого будет запускаться скрипт.
Для упрощения формирования расписания, можно воспользоваться прекрасным сервисом.