【发布时间】:2018-03-24 03:58:11
【问题描述】:
我正在构建一个 .NET Core 2.0 Web API 并且我正在创建一个 Docker 映像。我对 Docker 很陌生,如果之前已经回答过这个问题,我深表歉意。
我有以下用于创建映像的 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"]
我采取的一种方法是在# 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 期间挂载卷,但官方 Docker 似乎不支持这种方法。
我现在正在考虑创建一个单独的图像,仅用于单元测试。
不确定是否有推荐的方法来实现我想要的。
【问题讨论】:
-
您找到解决方案了吗?我遇到了完全相同的问题。
-
@Mike 不,抱歉,还没有。我刚刚采用了我提到的将测试结果临时添加到最终图像并提取它们的方法。对 Docker 来说很新,所以我只是想检查一下是否有其他方法或推荐的方法。
标签: unit-testing dockerfile asp.net-core-2.0