带有 docker 和 .NET Core 2.0 的 VSTS CI/CD - 复制失败

VSTS CI/CD with docker and .NET Core 2.0 - Copy failed

在遵循几个 .NET Core 2.0 Visual Studio 团队服务连续 Integration/Continuous 交付示例时,我在 VSTS 中遇到了复制错误。

通过 VS17 添加 docker 支持在本地使用这样的 docker 文件效果很好。

FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "myapp.dll"]

对于 MVC 应用程序和 WebAPI 应用程序,它与 docker-compose 本地运行良好。

添加 VSTS CI 构建过程和 运行 时,我一直在复制时遇到错误。

Building myapp Service 'myapp' failed to build: COPY failed: GetFileAttributesEx \?\C:\Windows\TEMP\docker-builder91\obj\Docker\publish: The system cannot find the path specified. C:\Program Files\Docker\docker-compose.exe failed with return code: 1

我找到的解决方法是 from this blog.

请注意,他们在 linux docker 机器上遇到错误

COPY failed: stat /var/lib/docker/tmp/docker-builder613328056/obj/Docker/publish: no such file or directory /usr/bin/docker failed with return code: 1

解决方案:

像这样制作Dockerfile.ci

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "SiliconValve.Vsts.DockerDemo.dll"]

还需要修改.docker忽略文件。

bin/
obj/
!*.dll
!obj/Docker/publish/*
!obj/Docker/empty/

这让我可以继续 CI 过程,但我认为有更容易解决问题的方法。

我设法从 VSTS 中构建服务并将它们复制到 Docker 图像。我使用 .Net Core VSTS 任务构建并发布到 "obj/Docker/Publish" 文件夹,并使用 "Docker-compose" 任务构建并发布 docker 容器到私有容器存储库。