如何使用DockerFile从git repo获取源代码

时间:2018-11-23 13:28:43

标签: linux git docker

我在远程Linux机器上安装了Git和Docker。我的项目的源代码位于裸仓库中。我需要一种在构建过程中将此仓库中的源代码提供给Docker的方法。

下面是我现在拥有的(基本上是VS 2017中Docker ASP.NET Core项目的默认模板)。

问:如何使裸仓库中的代码可用?克隆是这里最好的选择吗?我的尝试可能由于auth-issues而失败,但是由于该回购在同一台计算机上,因此我认为在这种情况下应该可以不使用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 :(得分:0)

这取决于您公开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

您仍然需要从构建容器访问主机,所以这可能很棘手,我会在脚本周围编写脚本以首先复制文件,然后复制文件。但是我个人对GITWEB进行卷曲以匿名方式获取文件。

答案 1 :(得分:0)

在Docker构建过程之外检查Git存储库;理想情况下,将DELIMITER $$ CREATE definer=`developer`@`localhost` PROCEDURE `update_patient`(IN `in_patient_id` INT(11), IN `in_name` VARCHAR(45), IN `in_surname` VARCHAR(45), IN `in_middle_name` VARCHAR(45), IN `in_email` VARCHAR(45), IN `in_phone` VARCHAR(45), IN `in_mobile` VARCHAR(45), IN `in_address_id` INT(11), IN `in_address_no` VARCHAR(8), IN `in_id` VARCHAR(45), IN `in_dob` date) NO SQL UPDATE patient SET name = in_name, surname = in_surname, middle_name = in_middle_name, email = in_email, phone = in_phone, mobile = in_mobile, address_id = in_address_id, address_no = in_address_no, id = in_id, dob = in_dob WHERE patient_id = in_patient_id LIMIT 1; END$$ DELIMITER ; 放在存储库本身的根目录中。将存储库中的内容getAllParams() { if(this.props.colorText == this.props.domainText){ return "pass what you want pass" } else { return } } render() { <Option optionText={option} colorText = {props.colors[index]} priceText = {props.prices[index]} rangeText = {props.ranges[index]} domainText = {props.domains[index]} {...this.getParams()} count= {index + 1} handleDeleteOption={props.handleDeleteOption} /> } 放入映像。

尝试在Dockerfile中执行Dockerfile有两个大问题:

  1. 如果您有一个私有存储库(通常这样做),则需要将凭证放入Docker空间进行克隆,一旦完成,任何人都可以通过{{1 }}或COPY

  2. git clone将记住它已经在上一个构建周期中运行了一个步骤,因此即使上游存储库已更改,它也不想重复docker history步骤。

能够偶尔从尚未签入的内容中构建映像,这对临时测试也很有帮助,并且将docker run硬编码在Dockerfile中使您无法执行此操作。