Совместное использование разных репозиториев между заданиями для Gitlab CI - PullRequest
0 голосов
/ 10 января 2019

В нашем проекте у нас есть несколько репозиториев, которые необходимы для создания нескольких различных контейнеров докеров.

Файлы Docker всех контейнеров находятся в одном репозитории.

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

По сути, я бы хотел сделать следующее:

stages:
  - initialize
  - build

repo1 pull:
  stage: initialize
  script:
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.instance/group/repo1.git

repo2 pull:
  stage: initialize
  script:
    - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.instance/group/repo2.git

image1:
  stage: build
  script:
      - cp repo1/ image1/
      - cd image1
      - docker build -t image1 --network=host .
      - docker login -u gitlab-runner -p gitlab docker.registry
      - docker push docker.registry/image1:latest

image2:
  stage: build
  script:
      - cp repo2/ image2/
      - cd image2
      - docker build -t image2 --network=host .
      - docker login -u gitlab-runner -p gitlab docker.registry
      - docker push docker.registry/image2:latest

Каков наилучший способ разделения репозиториев по стадиям, но при этом допускается параллельное построение внутри стадии?

1 Ответ

0 голосов
/ 10 января 2019

Я все еще изучаю Gitlab-ci, но, может быть, cache поможет?

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

cache:
  paths:
    - repo1/
    - repo2/

Ссылка на кеш Gitlab: https://docs.gitlab.com/ee/ci/caching/

Edit:
Или, может быть, было бы неплохо использовать субмодули Git для зависимых репозиториев? Затем можно настроить бегуна на получение этих подмодулей в рабочую область, и у вас должен быть доступ к ним на протяжении всего задания ci.

Вам нужно добавить .gitmodules файл, который будет выглядеть примерно так:

[submodule "repo1"]
  path = repo1
  url = ../repo1.git
[submodule "repo2"]
  path = repo2
  url = ../repo2.git

А потом в вашем .gitlab-ci.yml

 variables:
   GIT_SUBMODULE_STRATEGY: normal

Ссылка на подмодуль Gitlab: https://docs.gitlab.com/ce/ci/git_submodules.html

...