[英]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
有兩個大問題:
如果您有一個私有存儲庫(通常會這樣做),則需要將憑據放入Docker空間進行克隆,一旦這樣做,對於任何人來說,通過docker history
或docker run
撤回它們都是很簡單的。
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.