На нашем сервере 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
(ОБНОВЛЕНИЕ: я отредактировал свой вопрос для ясности)