簡體   English   中英

如何使用 DockerFile 從 git repo 獲取源代碼

[英]How to get source code from git repo using DockerFile

我在遠程 Linux 機器上有 Git 和 Docker。 我的項目的源代碼在一個裸倉庫中。 我需要一種方法,讓 Docker 在構建過程中可以使用此存儲庫中的源代碼。

下面是我現在擁有的(這基本上是 VS 2017 中 Docker ASP.NET 核心項目的默認模板)。

問:如何使裸倉庫中的代碼可用? 克隆是最好的選擇嗎? 我的嘗試可能由於身份驗證問題而失敗,但由於回購在同一台機器上,我認為在這種情況下應該可以直接訪問它而無需使用 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"]

這取決於您如何公開git存儲庫。 如果您運行gitweb,則可以對要擁有的文件的原始版本運行http請求。 如果您只想獲取最新文件,則可以執行淺表克隆(depth = 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

您仍然需要從build容器訪問主機,所以這可能很棘手,我會在腳本周圍編寫腳本以首先復制文件,然后再復制文件。 但是我個人對GITWEB進行卷曲以匿名獲取文件。

在Docker構建過程之外檢查Git存儲庫; 理想情況下,將Dockerfile放在存儲庫本身的根目錄中。 將存儲庫的內容COPY到映像中。

嘗試在Dockerfile中進行git clone有兩個大問題:

  1. 如果您有一個私有存儲庫(通常會這樣做),則需要將憑據放入Docker空間進行克隆,一旦這樣做,對於任何人來說,通過docker historydocker run撤回它們都是很簡單的。

  2. docker build將記住它已經在上一個構建周期中運行了一個步驟,因此即使上游存儲庫已更改,它也不想重復git clone步驟。

對於偶爾進行的測試,還可以從尚未簽入的內容構建映像(這還很有用),並且在Dockerfile中對git clone硬編碼,使您無法做到這一點。

借助BuildKit 0.11.0 (2023 年 1 月),您現在可以在 Dockerfile 中使用一個新選項。
內置Dockerfile 前端已更新到 v1.5.0 ,它包括:

dockerfile(實驗室):實施ADD <git ref> #2799

例如,

 # syntax=docker/dockerfile-upstream:master-labs # ↑ Will be included in `syntax=docker/dockerfile:1.5-labs` FROM alpine ADD --keep-git-dir=true https://github.com/moby/buildkit.git#v0.10.1 /buildkit

在你的情況下:

ADD --keep-git-dir=true ssh://user@gitserver/volume1/git/project /project

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM