Чтобы настроить зеркалирование репозитория, на странице проекта перейдите в «Настройки» → «Репозиторий» → «Зеркалирование репозиториев».
Если репозиторий пуст, сначала выполните его импорт. При зеркалировании запускаются все хуки, и загрузка большого репозитория может существенно нагрузить систему.
Настройка pull-зеркалирования репозитория
Для одного проекта можно настроить только одну задачу pull-зеркалирования. Задач push-зеркалирования может быть несколько.
Чтобы настроить pull-зеркалирование репозитория, выполните следующие шаги:
-
Перейдите на страницу проекта:
- Откройте проект в интерфейсе Deckhouse Code.
- В левом меню выберите «Настройки» → «Репозиторий».
- Прокрутите до секции «Зеркалирование репозиториев».
-
Укажите URL-адрес репозитория. Учётные данные в URL-адресе игнорируются. Для авторизации используйте поля в блоке «Метод аутентификации» ниже.
-
Настройте аутентификацию:
- Если подключение осуществляется по HTTP(S), в поле «Метод аутентификации» выберите «Имя пользователя и пароль» и укажите:
- «Имя пользователя» — имя пользователя;
- «Пароль» — пароль или токен доступа.
- Если используется SSH-зеркалирование, укажите имя пользователя (обычно
git). После сохранения конфигурации Deckhouse Code сгенерирует SSH-ключ, который будет использоваться для доступа.
- Если подключение осуществляется по HTTP(S), в поле «Метод аутентификации» выберите «Имя пользователя и пароль» и укажите:
Фильтр веток
Блок «Фильтр веток» в настройках зеркалирования определяет, какие ветки загружаются из исходного репозитория:
- «Зеркалировать все ветки» — зеркалируются все ветки исходного репозитория.
- «Зеркалировать только защищённые ветки» — зеркалируются только ветки, защищённые в этом проекте. Параметр недоступен, пока в проекте нет ни одной защищённой ветки (учитываются также защищённые ветки родительской группы). Подробнее — в разделе «Защищённые ветки».
- «Зеркалировать совпадающие ветки» — зеркалируются только ветки, имена которых соответствуют указанному регулярному выражению (синтаксис RE2). Выражение сопоставляется с именем ветки целиком. При вводе выражения форма показывает, сколько веток этого репозитория ему соответствует.
Влияние фильтра веток на синхронизацию тегов
Фильтр веток действует и на теги. Если выбран параметр «Зеркалировать только защищённые ветки» или «Зеркалировать совпадающие ветки», тег исходного репозитория синхронизируется только в том случае, если его коммит есть в одной из веток этого репозитория. Остальные теги пропускаются.
Учитывайте следующие особенности:
- При выборе параметра «Зеркалировать все ветки» синхронизируются все теги исходного репозитория.
- Тег, пропущенный из-за фильтра, не теряется: он проверяется заново при каждой синхронизации, и как только его коммит попадает в одну из зеркалируемых веток, тег создаётся в зеркале.
- Проверка выполняется по всем веткам репозитория-зеркала, включая ветки, созданные непосредственно в Deckhouse Code, а не только по веткам, попадающим под фильтр.
- Уже синхронизированные теги остаются в репозитории, даже если фильтр веток впоследствии изменён так, что больше их не охватывает.
Импорт репозитория по URL с настройкой pull-зеркалирования
Вы можете настроить pull-зеркалирование во время импорта репозитория по URL: проект будет создан и сразу настроен как pull-зеркало исходного репозитория. При этом не требуется настраивать зеркалирование отдельно после импорта.
Зеркалирование репозиториев должно быть включено администратором на уровне инстанса. В «Области администратора» перейдите в «Настройки» → «Репозиторий» → «Зеркалирование репозитория» (настройка mirror_available). Если зеркалирование не включено на уровне инстанса, флажок «Зеркалировать репозиторий» отображается неактивным (недоступен для выбора).
Чтобы импортировать репозиторий по URL с настройкой pull-зеркалирования, выполните следующие шаги:
-
Создайте новый проект:
- Перейдите в «Новый проект» → «Импортировать проект» → «Репозиторий по URL».
- Укажите URL-адрес исходного репозитория.
- Если для доступа к исходному репозиторию требуется аутентификация, укажите учётные данные.
-
Установите флажок «Зеркалировать репозиторий».
-
Создайте проект.
При первоначальном импорте репозиторий создаётся и наполняется данными из источника. После этого проект автоматически поддерживается в актуальном состоянии по расписанию pull-зеркалирования (подробнее — в разделе «Работа расписания и обработка ошибок» ниже).
Чтобы ограничить зеркалирование защищёнными ветками или ветками, подходящими под шаблон, после импорта настройте фильтр веток на странице проекта «Настройки» → «Репозиторий» → «Зеркалирование репозиториев» (подробнее — в разделе «Фильтр веток» выше).
Также вы можете превратить существующий проект в pull-зеркало, выполнив в него импорт по URL; для этого требуется роль Maintainer. В обоих случаях зеркалирование выполняется от имени пользователя, который его настроил.
Работа расписания и обработка ошибок
- Назначение задач pull-зеркалирования выполняется один раз в час (
Projects::PullMirrorScheduleWorker). - Каждое зеркало обновляется не чаще одного раза в 6 часов.
- Если задача зеркалирования завершилась с ошибкой, следующая попытка будет выполнена при следующем запуске
Projects::PullMirrorScheduleWorker. Максимальное количество попыток при ошибках — 5. Нажатие кнопки «Обновить сейчас» сбрасывает счётчик неуспешных попыток. - Если задача Sidekiq завершилась аварийно (например, при перезапуске Sidekiq), её статус будет обновлён через 3 часа, после чего будет добавлена новая попытка синхронизации.
Особенности работы с LFS (Large File Storage)
При pull-зеркалировании LFS-объекты загружаются только в том случае, если LFS включён в целевом проекте Deckhouse Code.