gitlab-CI Эффективное получение зависимых git репозиториев для заданий CI - PullRequest
0 голосов
/ 10 января 2020

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

Я нахожу способ клонировать зависимый репозиторий, используя эту команду в скрипте задания

git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.mycompany.com/path_to_my/dependent_repo.git

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

Есть ли способ "извлечь" зависимое репо так же эффективно, как GitLab CI извлекает свое собственное репо (против которого будет запускаться CI), в основном выполняя извлечение вместо клона?

Должен ли я использовать кеш?

1 Ответ

0 голосов
/ 15 января 2020

Если у вас есть один основной репо, который зависит от нескольких других репо, я бы добавил их как подмодули. Это облегчает работу в GitLab, и ваши коллеги могут легко найти правильные версии, которые им необходимо клонировать для этих репозиториев. Если у вас есть какие-то специфические c, которые не нужны в качестве подмодулей, тогда я понимаю!

В GitLab есть несколько различных способов справиться с этим. Самый простой - использовать переменную GIT_STRATEGY:

https://docs.gitlab.com/ee/ci/yaml/#git -strategy

Вы можете установить fetch следующим образом:

my_job:
  variables:
    GIT_STRATEGY: fetch
  script:
    - echo test

Затем GitLab попытается повторно использовать существующий рабочий каталог вместо того, чтобы всегда клонировать новый.

У меня был случай, когда я использовал флаг для клона git, называемый --reference:

https://git-scm.com/docs/git-clone#Documentation / git -clone.txt --- reference-if-ableltrepositorygt

Есть некоторые очень странные особые случаи, о которых вам нужно подумать , Этот флаг делает то, что git использует локальную копию хранилища и копирует объекты из этого, вместо того, чтобы всегда копировать из сети. В некоторых случаях это может значительно ускорить операции клонирования.

В дополнение к этим предложениям у GitLab есть страница с предложениями по работе с большими репозиториями:

https://docs.gitlab.com/ee/ci/large_repositories/

...