Я пытаюсь клонировать репозиторий компании из Gerrit в Dockerfile.
У меня нет проблем с предоставлением моего личного ключа S SH для образа, не сохраняя его там (с помощью многоступенчатой сборки).
Моя проблема в том, что для репозитория компании на Gerrit требуется клон git через s sh:
git clone "ssh://usr@gerrit.com:port/path/to/repo
Я пытаюсь сделать это с помощью экспериментов buildKit. Команда run в Dockerfile:
RUN --mount=type=ssh git clone usr@gerrit.com:port/path/to/repo /image/path
Но это не говорит git, чтобы использовать s sh, и поэтому она просто использует свой стандартный протокол и порт.
Выполнение этого в Dockerfile приводит к следующей ошибке
#14 0.659 Cloning into '/image/path'...
#14 0.890 Warning: Permanently added the ECDSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts.
#14 6.740 Permission denied, please try again.
#14 6.774 Received disconnect from xxx.xxx.xxx.xxx port 22:2: Too many authentication failures
#14 6.774 Disconnected from xxx.xxx.xxx.xxx port 22
#14 6.774 fatal: Could not read from remote repository.
#14 6.774
#14 6.774 Please make sure you have the correct access rights
#14 6.774 and the repository exists.
В ошибке четко указано, что она пытается использовать порт 22, хотя я указал иное.
Если Я использую RUN git clone "ssh://usr@gerrit.com:port/path/to/repo"
, в нем говорится, что он не может найти удаленного репо. Эта команда не выполняется только в Dockerfile, поскольку в моей компании это стандартный способ клонирования наших репозиториев.
Полный файл Docker находится здесь:
# syntax=docker/dockerfile:experimental
# Using multistage build, where intermediate stage is used for cloning private repo from gerrit
FROM ubuntu as intermediate
# install git
RUN apt-get update
RUN apt-get install -y git openssh-client
# add credentials on build
ARG SSH_PRIVATE_KEY
RUN mkdir /root/.ssh/
RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa && chmod 400 /root/.ssh/id_rsa
# Add gerrit to known hosts
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan gerrit.com >> /root/.ssh/known_hosts
# Clone our repo from gerrit
RUN --mount=type=ssh git clone usr@gerrit.com:port/path/to/repo /image/path
# Actual build stage here
FROM ubuntu:18.04
...
Есть ли другой способ явного использования соединения s sh при использовании git clone
в Dockerfile ?