2017-09-13 57 views
1

我有一个.net核心应用程序,我想在docker上运行。 我使用VS Docker Tools'添加容器支持',并添加了一个docker-compose项目。Docker-compose on VSTS

当我建立它时,我得到使用我的重新编译的.net核心应用程序和我的dockerfile构建的容器。

这里是docker-compose.dcproj

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk"> 
    <PropertyGroup Label="Globals"> 
    <ProjectVersion>2.0</ProjectVersion> 
    <DockerTargetOS>Linux</DockerTargetOS> 
    <ProjectGuid>a7cb971b-57ac-4704-851d-a322cf4f9e3f</ProjectGuid> 
    </PropertyGroup> 
    <ItemGroup> 
    <None Include="docker-compose.ci.build.yml" /> 
    <None Include="docker-compose.override.yml"> 
     <DependentUpon>docker-compose.yml</DependentUpon> 
    </None> 
    <None Include="docker-compose.yml" /> 
    </ItemGroup> 
</Project> 

以下是文件: docker-compose.yml

version: '3' 

services: 
    coresandbox: 
    image: coresandbox 
    build: 
     context: ./CoreSandbox 
     dockerfile: Dockerfile 

docker-compose.override.yml

version: '3' 

docker-compose.ci.build.yml

version: '3' 

services: 
    ci-build: 
    image: microsoft/aspnetcore-build:2.0 
    volumes: 
     - .:/src 
    working_dir: /src 
    command: /bin/bash -c "dotnet restore ./CoreSandbox.sln && dotnet publish ./CoreSandbox.sln -c Release -o ./obj/Docker/publish" 

现在我已经配置VSTS完成以下任务: 1.获取源 2.构建服务 - 泊坞撰写 的任务看起来相当基本的,我将所有默认设置到位 VSTS task screenshot

然后我从构建中获取此日志

/usr/local/bin/docker-compose -f /home/alex/testagent/_work/2/s/docker-compose.yml -f /home/alex/testagent/_work/2/s/docker-compose.ci.build.yml -f /home/alex/testagent/.docker-compose.1505284937228.yml -p newsroomly/CoreSandbox build 
Building coresandbox 
Step 1/10 : FROM microsoft/dotnet:2.0-runtime 
---> a2f5b3f42c0c 
Step 2/10 : ARG source 
---> Using cache 
---> 7a707828214b 
Step 3/10 : WORKDIR /app 
---> Using cache 
---> ff4262616387 
Step 4/10 : COPY ${source:-obj/Docker/publish} . 
Service 'coresandbox' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder666656323/obj/Docker/publish: no such file or directory 
Building coresandbox 
Service 'coresandbox' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder666656323/obj/Docker/publish: no such file or directory 
/usr/local/bin/docker-compose failed with return code: 1 

很明显,问题是dotnet构建任务未运行之前,撰写尝试构建容器。

我也曾尝试dotnet build my.sln但按这个问题:https://github.com/dotnet/cli/issues/6178这是不支持的,我得到error MSB4236: The SDK 'Microsoft.Docker.Sdk' specified could not be found.

看来,docker-compose.ci.build.yml意味着你做docker-compose -f docker-compose.ci.build.yml up,然后你做docker-compose -f docker-compose.yml build

然而,当我这样做,我得到了同样的错误有关缺失SDK

/src/docker-compose.dcproj : error MSB4236: The SDK 'Microsoft.Docker.Sdk' specified could not be found.

所以回到我的问题 - 如何建立我的VSTS

+0

如何根本不使用'docker-compose.ci.build.yml',有帮助吗? –

+0

您是否使用托管代理或私人代理?您是否在Mac或Linux构建代理上运行构建? –

+0

Linux,私人。我发现一个解决方法将在稍后发布。 – zaitsman

回答

0

这里dcproj的解决方案 - VSTS CI/CD with docker and .NET Core 2.0 - Copy failed

我使用.NET Framework应用程序时,正好遇到同样的问题。我使用了另一种解决方案,在VS解决方案构建步骤中,我不得不使用Release配置来构建,否则发布文件夹将不会显示。

你可以做的一件事是改变你的dockerfile中的这一行,我认为这对我有帮助。 命令:

/bin/bash -c "dotnet restore ./CoreSandbox.sln && dotnet publish ./CoreSandbox.sln -c Release -o ./obj/Docker/publish" 

到 命令:

/bin/bash -c "dotnet restore ./CoreSandbox.sln && dotnet publish ./CoreSandbox.sln -c Release -o ./obj/Docker" 

我旋转起来我的私人生成代理,它为我节省了大量的时间,而不是在VSTS下载托管代理泊坞窗图像。

0

/src/docker-compose.dcproj : error MSB4236: The SDK 'Microsoft.Docker.Sdk' specified could not be found.的修复程序是使用microsoft/aspnetcore-build:1.0-2.0图像而不是microsoft/aspnetcore-build:2.0

2.0图像缺少Microsoft.Docker.Sdk。这将在预览版本2中从2.1开始修复。

+0

将部分文件部署到实际工作的配置项中有这种解决方法。不过,我已经离开使用'dcproj',它增加了0值和大量的开销 – zaitsman