Как вытащить подмодули с --remote в Gitlab CI?

Мне нужно, чтобы мой 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 пытается это сделать, я получаю сообщение об ошибке. Как я могу обойти это?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
823
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я упоминалось ранее обновляю файл ~/.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 обязательно.

Спасибо. К сожалению, отключение строгой проверки хоста только изменило ошибку на «Отказано в доступе, попробуйте еще раз».

d33tah 31.05.2019 12:54

Защищены ли эти секретные ключи парольной фразой?

VonC 31.05.2019 13:27

На самом деле я не добавлял никакого ключа, полагая, что, поскольку значения по умолчанию Gitlab CI могут вытащить ключ, я тоже смогу это сделать. Затем я обнаружил, что в документах говорится, что мне нужен ключ развертывания, и я добавил его, но не смог повторно добавить его в другой подмодуль, который я использовал... и после некоторых разочаровывающих копаний я понял, что мне не нужно повторно -добавьте его, просто найдите и включите его. Итак, похоже, что я наделал немного (обратимого) беспорядка в процессе, но теперь проект работает. Спасибо за уделенное время!

d33tah 31.05.2019 14:13

@d33tah Отлично! Я включил ваш комментарий в ответ для большей наглядности.

VonC 31.05.2019 14:16

конечно, просто хотел перепроверить, что CI работает хорошо, прежде чем голосовать и отмечать как решенное. Спасибо за напоминание ;)

d33tah 31.05.2019 14:51

Другие вопросы по теме