teamcity 可以从 docker 容器中的 dotnet test 中获取测试结果并显示在测试选项卡上吗?

问题描述 投票:0回答:2

我正在使用 Teamcity 的 docker build 命令在 docker 容器中测试和构建我的服务。这对于构建来说效果很好,但我希望能够以与使用 Teamcity 的 dotnet 测试功能相同的方式拾取 nunit 测试结果并显示在测试选项卡中。

这可能吗?

使用 this 作为创建多阶段构建来运行我的测试的指南,这是到目前为止我的 docker 文件。

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS restore
WORKDIR /src
 
COPY ["MyService/MyService.csproj", "MyService/"]
COPY ["MyService.Tests/MyService.Tests.csproj", "MyService.Tests/"]

RUN dotnet restore "MyService/MyService.csproj"
RUN dotnet restore "MyService.Tests/MyService.Tests.csproj"

FROM restore AS build
COPY . .
RUN dotnet build "MyService/MyService.csproj" -c Release -o /app/build

FROM build AS test
RUN dotnet test "MyService.Tests/MyService.Tests.csproj" -c Release --logger "trx;LogFileName=TestResults.trx"

FROM scratch AS export-test-results
COPY --from=test /src/MyService.Tests/TestResults/*.trx .

FROM build AS publish
RUN dotnet publish "MyService/MyService.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

ENTRYPOINT ["dotnet", "MyService.dll"]

我的 teamcity 构建步骤配置如下所示:

dockerCommand {
    commandType = build {
        source = file {
            path = "MyService/Dockerfile"
        }
        contextDir = "."
        namesAndTags = "myservice:latest"
        commandArgs = "--network host --target export-test-results --output type=local,dest=."
    }
    param("dockerImage.platform", "linux")
}

如果我将 .trx 文件作为该步骤的产物呈现,我有点希望 teamcity 能够拾取它,但不确定 tc 是否是这样工作的。

有人解决过这个问题吗?如果是的话,如何解决?

蒂亚

有钱

c# docker nunit teamcity
2个回答
0
投票

免责声明:我既没有测试过它,也没有设置过这样的设置。但我对 TeamCity 有一些经验,并且由于您在一周内没有收到任何反馈,我认为这可能比没有好😉

根据 TeamCity 文档,我认为名为 XML 报告处理构建功能 可以解决这个问题。您可以尝试配置以下内容并看看会发生什么吗?


0
投票

问题在于

docker build
正在临时/临时区域中创建一个新容器,TeamCity 无法看到该容器。

即您的测试会在某个文件夹中生成一个 TRX 文件,但该文件位于容器内,作为

docker build
的一部分。您需要将 trx 文件从容器中取出并放入 TeamCity 可以拾取的位置。

使用

docker run
docker compose
时,典型的解决方案是将卷映射到容器中。让您的测试将 trx 文件写入该映射文件夹,当容器退出时,它会轻松地出现在那里,准备供 TeamCity 读取。

但是,在 docker 构建期间无法将卷映射到容器中

我们最终需要寻找其他方法来获取文件。我没有答案,但另一个 stackoverflow 问题有:

Docker:在构建容器时将文件复制出容器

© www.soinside.com 2019 - 2024. All rights reserved.