.net - 从 mssql-server docker 容器中运行“dotnet test”
问题描述
我有一个基于microsoft/dotnet-framework:4.7.2-sdk
图像在 docker 中运行的 dotnet 构建过程。
恢复、构建和发布按预期工作,但我的集成测试需要在机器上安装 SQL Server。
我想使用多阶段构建dotnet test
在dotnet xunit
基于microsoft/mssql-server-windows-developer:2017-latest
.
但是这样做我不再可以访问 dotnet sdk。如何dotnet test
从构建的第二阶段运行。
有些像这样(不工作,最后一步失败,因为 dotnet 命令无法识别):
FROM microsoft/dotnet-framework:4.7.2-sdk AS build
WORKDIR /app
# # Copy csproj and restore as distinct layers
COPY ./*.sln ./NuGet.config ./
COPY ./libs ./libs
COPY ./src ./src
WORKDIR /app/src/Tests/
RUN dotnet build
FROM microsoft/mssql-server-windows-developer:2017-latest
WORKDIR /app/
COPY --from=build /app/src/Tests/ .
RUN dotnet xunit
解决方案
在尝试安装 dotnet 构建工具和在 'microsoft/mssql-server-windows-developer' 映像上运行测试的先决条件多次尝试失败后,我发现在 `microsoft/dotnet-framework:4.7. 2-sdk' 图像可能更容易。其实容易多了。
尽管我遵循了本指南https://github.com/MicrosoftDocs/visualstudio-docs/blob/master/docs/install/build-tools-container.md在实际运行测试时遇到了各种麻烦。
但反之亦然。构建需要一些时间,但它有效。我的 Dockerfile 的开头是:
# The 'docker build' command must be run with '-m 4g' argument for sql server.
FROM microsoft/dotnet-framework:4.7.2-sdk
SHELL [ "powershell.exe", "-Command" ]
RUN curl.exe -L -o sql.box https://go.microsoft.com/fwlink/?linkid=840944
RUN curl.exe -L -o sql.exe https://go.microsoft.com/fwlink/?linkid=840945
RUN Start-Process -Wait -FilePath .\sql.exe -ArgumentList /qs, /x:setup
RUN .\setup\setup.exe /q /ACTION=Install /INSTANCENAME=MSSQLSERVER /FEATURES=SQLEngine /UPDATEENABLED=0 /SQLSVCACCOUNT='NT AUTHORITY\System' /SQLSYSADMINACCOUNTS='BUILTIN\ADMINISTRATORS' /TCPENABLED=1 /NPENABLED=0 /IACCEPTSQLSERVERLICENSETERMS
ENV MSSQL_IS_RUNNING_IN_DOCKER true
其余的只是标准的复制/dotnet 构建/dotnet 测试的东西。
推荐阅读
- reactjs - 最佳实践 React hooks HTTP 加载
- c# - 如何让我的客户在没有 Unity 软件的情况下与我的代码列表进行交互?
- javascript - Highcharts 多系列 yAxis 自动缩放
- flutter - Flutter中如何在文本字符串中使用引号?
- android - 从adb调用广播时是否可以返回值?
- angular - 以角度提交表单时出现mat-select问题
- java - Hibernate 代码在提交 txn 之前检查会话是否已关闭,但随后会抱怨会话已关闭
- azure - 监控外部 IP 的日志分析查询
- sql - SQL server : Replace the value using like operator
- typescript - 如何控制 Angular 6 上的内存泄漏和节点