Как я могу использовать субмодули при локальном запуске gitlab-runner? - PullRequest
0 голосов
/ 09 октября 2019

На нашем сервере Gitlab у меня есть два репозитория, где один репозиторий ('EPSILON-SDK-C') является субмодулем другого. Когда я запускаю gitlab-runner локально на моей машине разработчика

 sudo gitlab-runner exec docker build_fw

gitlab-runner не может найти подмодуль, как видно из этого вывода от gitlab-runner:

Updating/initializing submodules...
Submodule 'thirdparty/EPSILON-SDK-C' (/home/me/gitlab_repos/EPSILON-SDK-C) registered for path 'thirdparty/EPSILON-SDK-C'
fatal: repository '/home/me/gitlab_repos/EPSILON-SDK-C' does not exist
fatal: clone of '/home/me/gitlab_repos/EPSILON-SDK-C' into submodule path '/builds/0/project-0/thirdparty/EPSILON-SDK-C' failed
Failed to clone 'thirdparty/EPSILON-SDK-C'. Retry scheduled
fatal: repository '/home/me/gitlab_repos/EPSILON-SDK-C' does not exist
fatal: clone of '/home/me/gitlab_repos/EPSILON-SDK-C' into submodule path '/builds/0/project-0/thirdparty/EPSILON-SDK-C' failed
Failed to clone 'thirdparty/EPSILON-SDK-C' a second time, aborting
ERROR: Job failed: exit code 1
FATAL: exit code 1

Однакокогда наш сервер Gitlab запускается коммитом, Gitlab успешно строит двоичный файл с использованием подмодуля, как видно из этого вывода конвейера Gitlab (4-5 строк для ясности удалено):

Updating/initializing submodules...
Synchronizing submodule url for 'thirdparty/EPSILON-SDK-C'
Entering 'thirdparty/EPSILON-SDK-C'
   (4-5 lines here removed for readabilty)
Authenticating with credentials from job payload (GitLab Registry)

Вопрос: Gitlab имеетнет проблем с поиском подмодуля, так почему же местный gitlab-runner не может найти подмодуль?

Мой .gitlab-ci.yml выглядит следующим образом:

image: "gitlab.company.local:4567/me/dockerforfw:latest"

stages:
  - build

build_fw:
  stage: build

  variables:
    GIT_SUBMODULE_STRATEGY: normal

  script:
    - "bash bin/dorelease_linux.sh"

Мои .gitmodules выглядят так:

$ cat .gitmodules
[submodule "thirdparty/EPSILON-SDK-C"]
    path = thirdparty/EPSILON-SDK-C
    url = ../EPSILON-SDK-C

Обратите внимание, что URL подмодуля является относительным,в соответствии с требованиями документации Gitlab: https://docs.gitlab.com/ee/ci/git_submodules.html#configuring-the-gitmodules-file

У меня есть доступ к репозиторию подмодулей, поэтому у меня нет этой проблемы, связанной с разрешениями:

$ git submodule sync
Synchronizing submodule url for 'thirdparty/EPSILON-SDK-C'

Мой локальный gitlab-Бегун - версия 12.3.0 (a8a019e0), и наш сервер Gitlab - версия GitLab Enterprise Edition 12.3.4-ee.

Вещи, которые я пробовал:

У меня естьпопробовал с абсолютным URL для субмодуля. Я также попытался сохранить локальный клон репозитория подмодулей в / home / me / gitlab_repos / Я также попытался добавить следующие действия before_script:

before_script:
  - git submodule sync --recursive
  - git submodule update --init --recursive

(ОБНОВЛЕНИЕ: я отредактировал свой вопрос для ясности)

...