Как получить исходный код из git repo с помощью DockerFile - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть Git и Docker на удаленной машине с Linux.Исходный код моего проекта в голом репо.Мне нужен способ сделать исходный код из этого репозитория доступным для Docker во время процесса сборки.

Ниже приведено то, что у меня сейчас (это в основном шаблон по умолчанию в VS 2017 для проекта Docker ASP.NET Core).).

В: Как сделать код доступным из репо?Является ли клон лучшим вариантом здесь?Мои попытки, вероятно, потерпели неудачу из-за проблем с аутентификацией, но, поскольку репо находится на той же машине, я предполагаю, что в этом случае должен быть доступ к нему без использования ssh?Можно ли как-нибудь сделать этот путь видимым / доступным для процесса Docker?

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src

RUN git clone ssh://user@gitserver/volume1/git/project // fails

RUN git clone /volume1/git/project // fails

COPY Test.sln ./
COPY Test/Test.csproj Test/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/Test
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Test.dll"]

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Проверьте Git-репозиторий вне процесса сборки Docker;в идеале, поместите Dockerfile в корневой каталог самого хранилища.COPY содержимое репозитория в образ.

При попытке сделать git clone внутри Dockerfile есть две большие проблемы:

  1. Если у вас естьчастный репозиторий (который вы часто делаете), вам нужно поместить учетные данные в пространство Docker, чтобы выполнить клонирование, и как только вы это сделаете, любой сможет вытащить их обратно через docker history или docker run.

    * 1013.*
  2. docker build будет помнить, что он уже выполнил шаг в предыдущем цикле сборки, и поэтому он не захочет повторять шаг git clone, даже если изменился вышестоящий репозиторий.

Кроме того, для периодического тестирования полезно иметь возможность создавать образ из чего-то, что еще не зарегистрировано (а пока), а жестко закодированный git clone в Dockerfile не дает вам возможностисделать это.

0 голосов
/ 23 ноября 2018

Это зависит от того, как вы выставляете git-репозиторий.Если вы запустите gitweb, вы можете выполнить http-запрос к исходной версии файла, который вы хотите получить.Если вы хотите получить только последний файл, вы можете выполнить мелкое клонирование (глубиной = 1), чтобы выбрать только ту версию, которая вам интересна, и скопировать файл оттуда.Но ты все скопируешь.Так что если вы используете пустой git-репозиторий, вы можете использовать git show и передать его в файл.

git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file >file

, как показано здесь https://stackoverflow.com/a/2467629/2955337

Вам все равно потребуется доступ к хосту изпостроить контейнер, так что это может быть сложно, я бы сценарий вокруг него, чтобы сначала скопировать файл, а затем скопировать файл.Но лично я делаю завиток в GITWEB, чтобы получить файл анонимно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...