gpt4 book ai didi

docker - 在 docker 容器内运行 dotnet 测试

转载 作者:行者123 更新时间:2023-12-01 15:43:33 25 4
gpt4 key购买 nike

我想运行 dotnet test命令在 docker 容器内,但我就是不知道把命令放在哪里。该项目是一个 .NET Core 2.1 测试项目。这样做的原因是我想运行端到端集成测试,这要求我的所有容器都在运行。

Docker 文件:

FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY *.sln ./
COPY Sombra.IntegrationTests/Sombra.IntegrationTests.csproj Sombra.IntegrationTests/
COPY . .
WORKDIR /src/Sombra.IntegrationTests
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "test", "Sombra.IntegrationTests.csproj"]

docker-compose.yml
version: '3'

services:
sombra.integrationtests:
image: sombra.integrationtests
build:
context: .
dockerfile: Sombra.IntegrationTests/Dockerfile
depends_on:
- rabbitmq

最佳答案

您正在使用运行时镜像来调用 sdk 命令测试。你的final来自base,base来自runtime。

我在构建容器时成功地将单元测试用作中间步骤,但从未使用 docker-compose 进行集成测试。关键的区别是我使用了 RUN命令而不是 entrypoint/cmd所以在构建容器时测试已经在执行。主要优点是测试失败时没有最终图像。但话又说回来,这是纯单元测试,没有集成测试。虽然我可以想象这也会起作用。

这是我的完整示例:

FROM microsoft/dotnet:2.0-sdk AS build-env
WORKDIR /app

# copy csproj and restore as distinct layers
COPY test.sln ./test.sln
COPY program/program.csproj ./program/program.csproj
COPY program.tests/program.tests.csproj ./program.tests/program.tests.csproj
RUN dotnet restore

# copy everything else and build
COPY . ./
RUN dotnet test program.tests -c Release
RUN dotnet publish program -c Release -o /app/out

# build runtime image
FROM microsoft/dotnet:2.0-runtime
WORKDIR /app
COPY --from=build-env /app/out ./
ENTRYPOINT ["dotnet", "program.dll"]

关于docker - 在 docker 容器内运行 dotnet 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com