docker - 在 docker 容器中运行 dotnet test
问题描述
我想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"]
码头工人-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"]
推荐阅读
- java - 使用 AES/CBC/PKCS5Padding 的值加密(Java 代码到 PHP)
- haskell - Haskell - 递归堆栈溢出
- reactjs - 在反应原生导航中传递参数
- postman-collection-runner - 在邮递员集合执行中,是否可以在每个集合中访问多个数据文件或在同一迭代中访问不同的行?
- javascript - Chartsjs 使用下拉菜单更新数据集
- sql - 带限位导轨的预载
- ios - 根据 SCNView 大小或手机屏幕大小缩小 SCNNode
- git - Git push -f origin [branch] 不起作用
- javascript - 如何扫描范围数据并在 JS 中查找自定义数据?
- c++ - 字符串的不同子字符串数