2017-09-13 16 views
1

私はドッカーで実行したい.netコアアプリケーションを持っています。 VS Docker Toolsを使用して「コンテナサポートを追加」し、docker-composeプロジェクトを追加しました。Docker-compose on VSTS

私はそれをビルドすると、私は再コンパイルされた.netのコアアプリケーションと私のドッカーファイルを使用して構築コンテナを取得します。ここで

ここ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

私は、次のタスクとVSTS設定した
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" 

:今すぐ 1.取得源 2.ビルドサービス - ドッカー作曲 をタスクはかなり基本的な見えます、私は、場所 VSTS task screenshot

ですべてのデフォルトを左Iビルド

/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

しかしやるときに私私は

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

ので、不足しているSDKについて同じエラーを得た、ということでした戻って私の質問に - どのように私はここで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構成でビルドしなければなりませんでした。そうしないと、パブリッシュフォルダは表示されません。

あなたのドッカーファイルでこの行を変更することができます。これは私を助けたと思います。 コマンド:

/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:2.0の代わりにmicrosoft/aspnetcore-build:1.0-2.0イメージを使用することです。

2.0イメージにMicrosoft.Docker.Sdkがありません。これはプレビュー2から始まる2.1で修正される予定です。

+0

実際に働いていたCIにいくつかのファイルを展開するこの回避策がありました。しかし、私はそれ以来、 'dcproj'を使用することから離れました。それは0の価値とたくさんのオーバーヘッドを追加します – zaitsman