Gitlab CI: клонировать репо только перед первой сборкой в конвейере
У меня есть ~5-10 сборок в моем файле.yml для Gitlab CI. Чтобы сэкономить время, мне интересно, есть ли способ НЕ переклонировать репо между каждой работой. В идеале, репо будет клонировано один раз, а затем будут выполнены все 3 задания. Я также не хочу объединять задания в одну сборку, потому что мне бы хотелось видеть результаты каждого отдельно (когда они объединены, "пройдено / не пройдено" в gitlab - это просто результат последнего задания).
Я не хочу просто делать git fetch
потому что я хочу свежий клон в начале.
stages:
- run
job1:
stage: run
script:
- pwd
- make all TEST=job1
job2:
stage: run
script:
- pwd
- make all TEST=job2
job3:
stage: run
script:
- pwd
- make all TEST=job3
...
1 ответ
Я также возился с этой темой.
На самом деле, я иду на стадии проверки сначала (с GIT_STRATEGY: clone
), а затем этап сборки с несколькими заданиями и GIT_STRATEGY: fetch
,
Это гарантирует, что репо действительно полностью клонируется вначале и извлекается только для каждого этапа сборки. Может быть, это вам тоже поможет.
stages:
- checkout
- build
checkout:
variables:
GIT_STRATEGY: clone
GIT_SUBMODULE_STRATEGY: recursive
stage: checkout
script: '@echo Checking out...'
build:commander:
stage: build
variables:
GIT_STRATEGY: fetch
script:
- _Publish.bat commander
artifacts:
paths:
- BuildArtifacts\Commander\**
build:login:
stage: build
variables:
GIT_STRATEGY: fetch
script:
- _Publish.bat login
artifacts:
paths:
- BuildArtifacts\Login\**
build:cli:
stage: build
variables:
GIT_STRATEGY: fetch
script:
- _Publish.bat cli
artifacts:
paths:
- BuildArtifacts\Cli\**
Это может быть полезно, если вы используете достаточно новую версию gitlab и бегуна: https://docs.gitlab.com/ce/ci/yaml/README.html
Вы можете установить для своей git-стратегии значение none и вручную клонировать репо в своем разделе before_script.
Это по-прежнему будет сопряжено с некоторыми трудностями - поскольку разные участники могут обслуживать разные задания, если у вас нет выделенного участника для этого проекта, всем участникам потребуется доступ к месту репо.