После написания статьи Как сделать mirror github-репозитория на бесплатной версии selfhosted GitLab возникла идея для написания мини-приложения, которое бы позволило автоматизировать процесс зеркалирования удаленных github-репозиториев.
Далее я перечислю основные мысли об этом приложении в виде обособленных тезисов. Их ни в коем случае не нужно воспринимать как пошаговый план, а просто как набор равных пунктов.
- У приложения должна быть своя БД, которая бы хранила список импортированных проектов. Важные характеристики хранимых объектов — название проекта (соответствует имени удаленного репозитория), урл репа, который нужно склонировать, урл репа в нашем гитлабе, дата/время клонирования и др;
- Приложение может выводить список склонированных репозиториев (из своей БД). Щелкнув на проект можно сразу перейти в гитлаб на страницу проекта;
- Для работы с gitlab можно использовать клиентскую либу. В настройках приложения можно задать адрес гитлаба и персональный токен. Для токена нужны определенные права;
- В приложение можно добавлять задание на клонирование. В простом случае — это просто строка в браузере, куда нужно вставить адрес удаленного репозитория, выпадающий список с группами проектов гитлаба и строка с именем проекта. Список групп проектов гитлаба можно получать с помощью gitlab api;
- Приложение скачивает с помощью gitlab api проект с гитлаба в какой то настраиваемый каталог;
- Согласно статье Как сделать mirror github-репозитория на бесплатной версии selfhosted GitLab подменяет fetch-url, чтобы можно было забирать изменения из гитхаба;
- делает пуш в гитлаб, чтобы полученные изменения появились в гитлабе;
- Ведет в своей БД лог таких синхронизаций;
- Работает по настраиваемому расписанию
Мысли, чтобы не забыть и на подумать
- Так как придется хранить еще одну копию проекта, то можно с NASa расшарить по nfs папку (или подключить диск по iscsi) и в конфиге указывать путь до этой папки/диска;
- Разработку приложения вести в том же гитлабе и использовать CI/CD — сборка и деплой артефактов в нексус (jar, docker-образ), разворачивание образов на app-сервере (возможно даже kubernetes)
- Мониторинг через prometheus/grafana
- Сбор логов в ELK
PS. Как вариант, можно не загружать скачанный проект в локальный гитлаб. По сути будет утилита для скачивания исходников выбранных проектов, а также способ их автоматической синхронизации. Этим решится вопрос с двукратным хранением одного и того же проекта.