.NET Core 2.0 Web APIをビルドしています。私はDockerイメージを作成しています。私はDockerにとって非常に新しいので、その質問が以前に答えられていれば謝ります。多段ドッカービルド(.NET Core 2.0)からのユニットテスト結果の抽出
画像を作成するために、以下のDockerファイルがあります。特に、私はビルドプロセス中にユニットテストを実行し、結果は./test/test_results.xml
に出力されます(ビルド時に作成された一時的なコンテナ内にあります)。私の質問は、ビルドが完了した後、これらのテスト結果にどのようにアクセスすればよいのでしょうか?
FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app
# Copy main csproj file for DataService
COPY src/DataService.csproj ./src/
RUN dotnet restore ./src/DataService.csproj
# Copy test csproj file for DataService
COPY test/DataService.Tests.csproj ./test/
RUN dotnet restore ./test/DataService.Tests.csproj
# Copy everything else (excluding elements in dockerignore)
COPY . ./
# Run the unit tests
RUN dotnet test --results-directory ./ --logger "trx;LogFileName=test_results.xml" ./test/DataService.Tests.csproj
# Publish the app to the out directory
RUN dotnet publish ./src/DataService.csproj -c Release -o out
# Build the runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
EXPOSE 5001
COPY --from=build-env /app/src/out .
# Copy test results to the final image as well??
# COPY --from=build-env /app/test/test_results.xml .
ENTRYPOINT ["dotnet", "DataService.dll"]
私が取ったアプローチの1つは、# COPY --from=build-env /app/test/test_results.xml .
という行にコメントすることです。これにより最終画像にtest_results.xml
が置かれます。次に、これらの結果を抽出し、次のpowershellスクリプトを使用して最終イメージからtest_results.xml
を削除します。
$id=$(docker create dataservice)
docker cp ${id}:app/test_results.xml ./test/test_results.xml
docker start $id
docker exec $id rm -rf /app/test_results.xml
docker commit $id dataservice
docker rm -vf $id
これは醜いと思われますが、私はそれを行うよりクリーンな方法があると思います。
私はdocker build
中にボリュームをマウントする方法があったことを期待していたが、それは、これは、公式ドッカーでサポートされる予定であることを表示されません。
単体テスト専用の別の画像を作成しています。
私は欲しいものを達成するための推奨される方法があるかどうかはわかりません。
解決方法はありますか?私は全く同じ問題を抱えています。 – Mike
@Mikeいいえ、申し訳ありませんが、まだです。テスト結果を最終的な画像に一時的に追加して抽出する方法については、私はちょっと考えました。 Dockerの新機能なので、これを行う方法や推奨される方法があるかどうかをチェックしたかっただけです。 – Francis