1

我正在尝试将单元测试作为docker build流程的一部分运行,但我偶然发现了两个资源:

基本上,如果我理解正确,他们建议的要点是有这样的东西来运行测试,作为构建最终 docker 映像的一部分:

# First stage
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
LABEL test=true
# Copy files
RUN dotnet test <project-or-solution> --logger trx --results-directory /test-results
# publish the app etc.

# Second stage
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
COPY --from=build-env ...

然后,在您的管道(例如,Azure Pipelines)中,您执行以下操作来复制/test-results第一阶段的内容(然后发布结果):

id=$( docker image ls --filter=label=test=true -q | head -n1 )
docker create --name test-container $id
docker cp test-container:/test-results ./test-results
docker rm test-container

但是,这就是我发生的事情:如果一个或多个测试失败,当我创建 my 时test-container,目录/test-results不存在;我认为原因是因为测试在负责运行测试的中间容器中失败,整个 Docker 构建失败,因此,中间容器中的更改不会提交到映像,只有成功/test-results在返回的图像中可用的单元测试--filter=label=test=true

我还看到了另一种方法,其中创建了一个带有 an 的单独图像ENTRYPOINT以便能够运行测试。

在中运行 C# 单元测试的正确和推荐方法是docker什么?

4

0 回答 0