我在远程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"]
答案 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
有两个大问题:
如果您有一个私有存储库(通常这样做),则需要将凭证放入Docker空间进行克隆,一旦完成,任何人都可以通过{{1 }}或COPY
。
git clone
将记住它已经在上一个构建周期中运行了一个步骤,因此即使上游存储库已更改,它也不想重复docker history
步骤。
能够偶尔从尚未签入的内容中构建映像,这对临时测试也很有帮助,并且将docker run
硬编码在Dockerfile中使您无法执行此操作。