Чтобы настроить зеркалирование репозитория, на странице проекта перейдите в «Настройки» → «Репозиторий» → «Зеркалирование репозиториев».

Если репозиторий пуст, сначала выполните его импорт. При зеркалировании запускаются все хуки, и загрузка большого репозитория может существенно нагрузить систему.

Настройка pull-зеркалирования репозитория

Для одного проекта можно настроить только одну задачу pull-зеркалирования. Задач push-зеркалирования может быть несколько.

Чтобы настроить pull-зеркалирование репозитория, выполните следующие шаги:

  1. Перейдите на страницу проекта:

    • Откройте проект в интерфейсе Deckhouse Code.
    • В левом меню выберите «Настройки» → «Репозиторий».
    • Прокрутите до секции «Зеркалирование репозиториев».
  2. Укажите URL-адрес репозитория. Учётные данные в URL-адресе игнорируются. Для авторизации используйте поля в блоке «Метод аутентификации» ниже.

  3. Настройте аутентификацию:

    • Если подключение осуществляется по HTTP(S), в поле «Метод аутентификации» выберите «Имя пользователя и пароль» и укажите:
      • «Имя пользователя» — имя пользователя;
      • «Пароль» — пароль или токен доступа.
    • Если используется SSH-зеркалирование, укажите имя пользователя (обычно git). После сохранения конфигурации Deckhouse Code сгенерирует SSH-ключ, который будет использоваться для доступа.

Фильтр веток

Блок «Фильтр веток» в настройках зеркалирования определяет, какие ветки загружаются из исходного репозитория:

  • «Зеркалировать все ветки» — зеркалируются все ветки исходного репозитория.
  • «Зеркалировать только защищённые ветки» — зеркалируются только ветки, защищённые в этом проекте. Параметр недоступен, пока в проекте нет ни одной защищённой ветки (учитываются также защищённые ветки родительской группы). Подробнее — в разделе «Защищённые ветки».
  • «Зеркалировать совпадающие ветки» — зеркалируются только ветки, имена которых соответствуют указанному регулярному выражению (синтаксис RE2). Выражение сопоставляется с именем ветки целиком. При вводе выражения форма показывает, сколько веток этого репозитория ему соответствует.

Влияние фильтра веток на синхронизацию тегов

Фильтр веток действует и на теги. Если выбран параметр «Зеркалировать только защищённые ветки» или «Зеркалировать совпадающие ветки», тег исходного репозитория синхронизируется только в том случае, если его коммит есть в одной из веток этого репозитория. Остальные теги пропускаются.

Учитывайте следующие особенности:

  • При выборе параметра «Зеркалировать все ветки» синхронизируются все теги исходного репозитория.
  • Тег, пропущенный из-за фильтра, не теряется: он проверяется заново при каждой синхронизации, и как только его коммит попадает в одну из зеркалируемых веток, тег создаётся в зеркале.
  • Проверка выполняется по всем веткам репозитория-зеркала, включая ветки, созданные непосредственно в Deckhouse Code, а не только по веткам, попадающим под фильтр.
  • Уже синхронизированные теги остаются в репозитории, даже если фильтр веток впоследствии изменён так, что больше их не охватывает.

Импорт репозитория по URL с настройкой pull-зеркалирования

Вы можете настроить pull-зеркалирование во время импорта репозитория по URL: проект будет создан и сразу настроен как pull-зеркало исходного репозитория. При этом не требуется настраивать зеркалирование отдельно после импорта.

Зеркалирование репозиториев должно быть включено администратором на уровне инстанса. В «Области администратора» перейдите в «Настройки» → «Репозиторий» → «Зеркалирование репозитория» (настройка mirror_available). Если зеркалирование не включено на уровне инстанса, флажок «Зеркалировать репозиторий» отображается неактивным (недоступен для выбора).

Чтобы импортировать репозиторий по URL с настройкой pull-зеркалирования, выполните следующие шаги:

  1. Создайте новый проект:

    • Перейдите в «Новый проект» → «Импортировать проект» → «Репозиторий по URL».
    • Укажите URL-адрес исходного репозитория.
    • Если для доступа к исходному репозиторию требуется аутентификация, укажите учётные данные.
  2. Установите флажок «Зеркалировать репозиторий».

  3. Создайте проект.

При первоначальном импорте репозиторий создаётся и наполняется данными из источника. После этого проект автоматически поддерживается в актуальном состоянии по расписанию pull-зеркалирования (подробнее — в разделе «Работа расписания и обработка ошибок» ниже).

Чтобы ограничить зеркалирование защищёнными ветками или ветками, подходящими под шаблон, после импорта настройте фильтр веток на странице проекта «Настройки» → «Репозиторий» → «Зеркалирование репозиториев» (подробнее — в разделе «Фильтр веток» выше).

Также вы можете превратить существующий проект в pull-зеркало, выполнив в него импорт по URL; для этого требуется роль Maintainer. В обоих случаях зеркалирование выполняется от имени пользователя, который его настроил.

Работа расписания и обработка ошибок

  • Назначение задач pull-зеркалирования выполняется один раз в час (Projects::PullMirrorScheduleWorker).
  • Каждое зеркало обновляется не чаще одного раза в 6 часов.
  • Если задача зеркалирования завершилась с ошибкой, следующая попытка будет выполнена при следующем запуске Projects::PullMirrorScheduleWorker. Максимальное количество попыток при ошибках — 5. Нажатие кнопки «Обновить сейчас» сбрасывает счётчик неуспешных попыток.
  • Если задача Sidekiq завершилась аварийно (например, при перезапуске Sidekiq), её статус будет обновлён через 3 часа, после чего будет добавлена новая попытка синхронизации.

Особенности работы с LFS (Large File Storage)

При pull-зеркалировании LFS-объекты загружаются только в том случае, если LFS включён в целевом проекте Deckhouse Code.