Как прозрачно кешировать git clone?
Я хотел бы предложить услугу непрерывной интеграции (я планирую использовать hudson
, но решение должно работать и для других) с веб-интерфейсом, где пользователь будет определять URL-адрес SCM (например, git
URL) и корень рабочей области / исходного кода, который используется для сборки, следует очистить (по крайней мере, по желанию) перед сборкой. Это требует много повторных проверок, которые я хотел бы кэшировать (то есть сделать так, чтобы они читались из локального хранилища, а не извлекались из удаленного ресурса).
Разные СКМ (git
, svn
и ртутный /hg
) использовать разные протоколы (HTTP, HTTPS, git
и т. д.), некоторые из них могут быть кэшированы (HTTP), другие, как правило, нет (HTTPS без использования посредника, что недопустимо для надежного сервиса imo - который я хочу предоставить) или конкретно нет (я не нашел ни одного git
кеширование протоколов серверов).
Кэширование HTTP не проблема, но мало git
Хостер поддерживает его или перенаправляет на HTTPS. Я хотел бы поддержать один протокол, который надежно кэширует проверки и предлагает пользователю использовать его.
Перенаправление через прокси SOCKS может быть достигнуто для HTTP и git
протокол, но это не позволяет кэширование. Другие протоколы, такие как IGD, также не могут быть использованы для кэширования.
1 ответ
Действительно, проблема, о которой вы говорите, существует и компенсирует множество вопросов, таких как "как долго я должен кэшировать ответ? Что, если у меня есть два проекта, показатели коммитов которых сильно отличаются?". Существуют некоторые проприетарные решения, которые делают то, что вы ищете, например, если вы используете Atlassian Stash, он имеет встроенный плагин, который управляет кэшированием ответов проверки, чтобы снизить нагрузку на сервер.
Лучшее решение в любом случае отличается от того, что вы хотите сделать. Лучшее и рекомендуемое решение - использовать хуки post-commit, они существуют в git, svn и, я думаю, в других vcs. Просто сделайте так, чтобы ваш репозиторий запускал сборку в вашей системе CI, а не непрерывно проводил опрос заданий CI. Как вы упомянули Jenkins (Hudson), плагин Git, например, уже предоставляет URL для выполнения этого вида деятельности.