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.

Это по-прежнему будет сопряжено с некоторыми трудностями - поскольку разные участники могут обслуживать разные задания, если у вас нет выделенного участника для этого проекта, всем участникам потребуется доступ к месту репо.

Другие вопросы по тегам