Docker - 在VSTS上构建

时间:2017-09-13 07:23:50

标签: docker .net-core azure-devops

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

当我构建它时,我使用我重新编译的.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.构建服务 - Docker Compose 该任务看起来相当基本,我保留了所有默认值 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上构建我的dcproj

2 个答案:

答案 0 :(得分:0)

以下是解决方案 - VSTS CI/CD with docker and .NET Core 2.0 - Copy failed

使用.Net framework app时遇到完全相同的问题。我使用了另一种解决方案,在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中的托管代理上下载docker镜像。

答案 1 :(得分: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.1中从预览2开始修复。