Мне нужно, чтобы мой Gitlab CI обновлял подмодули с флагом --remote
, чтобы HEAD был установлен на удаленный HEAD. Немного погуглив, я обнаружил, что мне нужно установить GIT_SUBMODULE_STRATEGY
на none
и запустить git submodule update --recursive --remote --init
вручную:
variables:
GIT_STRATEGY: clone
GIT_SUBMODULE_STRATEGY: none
before_script:
- apk add git || ( apt-get update && apt-get -y install git )
- git submodule update --recursive --remote --init
test:build:
services:
- docker:dind
image: ubuntu
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
script:
- echo "done
К сожалению, я получаю ошибку CI (имена отредактированы):
$ git submodule update --recursive --remote --init
Submodule 'current_project_name/submodule_project_name' (ssh://[email protected]:9931/someorg/submodule_project_name.git) registered for path 'current_project_name/submodule_project_name'
Cloning into '/builds/someorg/current_project_name/current_project_name/submodule_project_name'...
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://[email protected]:9931/someorg/submodule_project_name.git' into submodule path '/builds/someorg/current_project_name/current_project_name/submodule_project_name' failed
Failed to clone 'current_project_name/submodule_project_name'. Retry scheduled
Cloning into '/builds/someorg/current_project_name/current_project_name/submodule_project_name'...
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://[email protected]:9931/someorg/submodule_project_name.git' into submodule path '/builds/someorg/current_project_name/current_project_name/submodule_project_name' failed
Failed to clone 'current_project_name/submodule_project_name' a second time, aborting
Я вижу, что у CI есть разрешения на клонирование этого submodule_project_name
, потому что, если я установлю GIT_SUBMODULE_STRATEGY
, например. до recursive
, КИ умудряется его тянуть (но это не --remote
, поэтому работает не так, как я хочу). К сожалению, когда мой before_script
пытается это сделать, я получаю сообщение об ошибке. Как я могу обойти это?
Я упоминалось ранее обновляю файл ~/.ssh/.known_hosts
как здесь.
Это не нужно, когда получение подмодулей до скрипта (что не то, что вы делаете с GIT_SUBMODULE_STRATEGY
установленным на NONE
)
В случае с dind (Docker In Docker) учитывайте также эта тема относительно ssh-add для закрытых ключей и директив .dockerini
/.dockerenv
SSH.
ОП д33тах подтверждает в комментариях:
I actually didn't add any key, assuming that since Gitlab CI's defaults can pull the key, I should be able to as well.
Then I found that docs say that I needed a deploy key and I added one
Да: добавление открытого ключа на стороне Gitlab обязательно.
Защищены ли эти секретные ключи парольной фразой?
На самом деле я не добавлял никакого ключа, полагая, что, поскольку значения по умолчанию Gitlab CI могут вытащить ключ, я тоже смогу это сделать. Затем я обнаружил, что в документах говорится, что мне нужен ключ развертывания, и я добавил его, но не смог повторно добавить его в другой подмодуль, который я использовал... и после некоторых разочаровывающих копаний я понял, что мне не нужно повторно -добавьте его, просто найдите и включите его. Итак, похоже, что я наделал немного (обратимого) беспорядка в процессе, но теперь проект работает. Спасибо за уделенное время!
@d33tah Отлично! Я включил ваш комментарий в ответ для большей наглядности.
конечно, просто хотел перепроверить, что CI работает хорошо, прежде чем голосовать и отмечать как решенное. Спасибо за напоминание ;)
Спасибо. К сожалению, отключение строгой проверки хоста только изменило ошибку на «Отказано в доступе, попробуйте еще раз».