我正在使用 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 是否是这样工作的。
有人解决过这个问题吗?如果是的话,如何解决?
蒂亚
有钱
免责声明:我既没有测试过它,也没有设置过这样的设置。但我对 TeamCity 有一些经验,并且由于您在一周内没有收到任何反馈,我认为这可能比没有好😉
根据 TeamCity 文档,我认为名为 XML 报告处理 的 构建功能 可以解决这个问题。您可以尝试配置以下内容并看看会发生什么吗?
问题在于
docker build
正在临时/临时区域中创建一个新容器,TeamCity 无法看到该容器。
即您的测试会在某个文件夹中生成一个 TRX 文件,但该文件位于容器内,作为
docker build
的一部分。您需要将 trx 文件从容器中取出并放入 TeamCity 可以拾取的位置。
使用
docker run
或 docker compose
时,典型的解决方案是将卷映射到容器中。让您的测试将 trx 文件写入该映射文件夹,当容器退出时,它会轻松地出现在那里,准备供 TeamCity 读取。
我们最终需要寻找其他方法来获取文件。我没有答案,但另一个 stackoverflow 问题有: