Ошибка для подмодуля git в Gitlab CI runner — «фатальный: путь назначения уже существует и не является пустым каталогом».

avatar
Michal Kurz
1 июля 2021 в 17:11
611
1
1

Я пытаюсь включить подмодуль в свой репозиторий GitLab. Он отлично работает локально, но мой конвейер сборки дает сбой. Согласно этой записи в документации, все, что мне нужно сделать, это использовать относительный URL-адрес и настроить GIT_SUBMODULE_STRATEGY, но на самом деле это не работает.

Мой .gitmodules:

[submodule "res/submoduleName"]
    path = res/submoduleName
    url = ../submoduleName.git

.gitlab-ci.yml:

variables:
  GIT_SUBMODULE_STRATEGY: recursive

integration-test:
  # ... 

Я получаю следующую ошибку в оболочке Pipeline:

Updating/initializing submodules recursively...
Submodule 'res/submoduleName' (https://gitlab-ci-token:[MASKED]@gitlab.com/mainProjectName/submoduleName.git) registered for path 'res/submoduleName'
fatal: destination path '/builds/_oBZKNaH/0/mainProjectName/mainProjectName/res/submoduleName' already exists and is not an empty directory.
fatal: clone of 'https://gitlab-ci-token:[MASKED]@gitlab.com/mainProjectName/submoduleName.git' into submodule path '/builds/_oBZKNaH/0/mainProjectName/mainProjectName/res/submoduleName' failed
Failed to clone 'res/submoduleName'. Retry scheduled
fatal: destination path '/builds/_oBZKNaH/0/mainProjectName/mainProjectName/res/submoduleName' already exists and is not an empty directory.
fatal: clone of 'https://gitlab-ci-token:[MASKED]@gitlab.com/mainProjectName/submoduleName.git' into submodule path '/builds/_oBZKNaH/0/mainProjectName/mainProjectName/res/submoduleName' failed
Failed to clone 'res/submoduleName' a second time, aborting
Cleaning up file based variables
00:00
ERROR: Job failed: exit code 1

Что я могу сделать, чтобы решить эту проблему?

Источник
Lukman
1 июля 2021 в 22:27
0

Является ли путь res/submoduleName существующей папкой с содержимым до вашего решения использовать подмодуль на этом пути? Если да, то вам нужно сначала удалить эту папку как локально, так и удаленно, прежде чем вы сможете зарегистрировать путь как путь к субмодулю.

Michal Kurz
2 июля 2021 в 08:14
0

Нет, такой папки никогда не было до добавления подмодуля

Ответы (1)

avatar
Michal Kurz
13 июля 2021 в 20:10
2

Сообщение об ошибке вводило в заблуждение. Папка была пуста, но у GitLab runner не было прав на запись в нее. Я решил проблему, добавив - chmod -R 777 res в before_script моей работы.

Jan Kaifer
29 октября 2021 в 11:32
1

Не знаю почему, но это работает. У нас есть два подмодуля, родительские папки у этих подмодулей разные, но у них одинаковые разрешения. Один из этих подмодулей работает, а другой нет (только в 80% случаев). Это решило нашу проблему.