【问题标题】:Install SQL Server Express 2014 on visual studio online build agent在 Visual Studio 在线构建代理上安装 SQL Server Express 2014
【发布时间】:2018-05-01 09:12:00
【问题描述】:

我正在尝试在 Visual Studio Online Build 代理上安装 SQL Server 2014 Express 实例,但它似乎卡住并在半小时后超时(我正在试用它并使用免费版本现在)。

我目前在构建开始时运行以下 powershell:

choco feature enable -n=allowGlobalConfirmation
choco install mssqlserver2014express --package-parameters='silentArgs:"/IACCEPTSQLSERVERLICENSETERMS /Q /ACTION=install /INSTANCEID=SQLEXPRESS /INSTANCENAME=SQLEXPRESS /UPDATEENABLED=FALSE /FEATURES=SQLENGINE"' -y

这可以在本地和 AppVeyor 中正常安装,但在 VSO Build 上会冻结。这是超时前的控制台日志:

Progress: 99% - Saving 311.7 MB of 311.73 MB
Progress: 100% - Completed download of C:\Users\VssAdministrator\AppData\Local\Temp\chocolatey\chocolatey\MsSqlServer2014Express\SQLEXPR.exe (311.73 MB).
Download of SQLEXPR.exe (311.73 MB) completed.
Hashes match.
C:\Users\VssAdministrator\AppData\Local\Temp\chocolatey\chocolatey\MsSqlServer2014Express\SQLEXPR.exe
Extracting...
Installing...
Installing MsSqlServer2014Express...

我很乐意听到不能直接解决安装问题的答案。例如,我发现建议 elsewhere 建议您不应该在构建代理上运行集成测试。但是,我不同意这个建议——我有 1000 个数据库测试只需要 5 分钟即可运行——如果这些测试失败,我宁愿让构建失败,而不是在构建管道中取得进展。此外,我不想模拟数据库 - 我使用的是 Dapper 而不是实体框架,并且想测试我的代码是否与数据库架构正确交互。

我还看到了一些建议,建议您设置自己的机器并预装 SQL 实例。我不想这样做,因为我们没有资源来设置和维护(应用安全补丁等)机器。我尝试使用 Azure SQL 服务器,它虽然易于维护,但创建新数据库需要很长时间。创建每个数据库似乎需要大约 2 分钟,每次测试运行会创建 20 个数据库。


更新 我已经在 AppVeyor 和 VSTS 上尝试过 microsoft/mssql-server-windows-express docker 镜像。 AppVeyor 在约 6 分钟内完成安装,但 VSTS 需要约 19 分钟。两者的下载都花了大约 4.5 分钟,所以我很乐意在 AppVeyor 中使用它进行缓存,但 19 分钟在 VSTS 中太长了。有谁知道如何诊断 VSTS 中的瓶颈?

docker pull microsoft/mssql-server-windows-express
docker run -d -p 1433:1433 -e sa_password=sgddsgbhidjsghuisg -e ACCEPT_EULA=Y microsoft/mssql-server-windows-express

【问题讨论】:

  • 数据库测试是做什么的?它们是简单地验证实体和数据库之间的映射,还是更多地涉及单元测试存储过程?
  • 他们的参与度更高——插入数据并将其读回,确保删除工作(使用级联规则)等。
  • 您是否考虑过将集成测试容器化?那将是理想的,IMO。另一种选择:使用 Azure SQL 实例。在托管代理上安装 SQL Server 肯定行不通。
  • 您介意详细说明一下吗? (也许是完整的答案?)我不确定我理解你的意思 - 我熟悉容器的概念,但从未真正使用过它们
  • @DanielMann 是否可以再次详细说明“肯定行不通”?它在 3 分钟内安装在 AppVeyor 机器上(除了开箱即用!)。我只是不知道在 VSTS 中运行时有什么不同

标签: sql-server build azure-pipelines


【解决方案1】:

在托管代理上安装 SQL Server 几乎肯定是行不通的。托管代理在每次构建时都会重新配置,然后取消配置。此外,它安装第三方软件的权限有限。

如果维护集成测试环境行不通,您有一些选择:

  1. 使用localdb应该在托管代理上可用。

  2. Containerize 你的集成测试并在容器中运行它们——准确解释 Docker 的工作原理以及如何完成它,这里太大而无法详细介绍,但基本思想是你创建 dockerfile 定义您的 SQL 环境,在托管代理上构建/运行容器,针对容器运行测试,然后丢弃容器。

  3. 使用 Azure SQL 实例——同样,太大而无法详细说明,但基本过程是您将拥有一个定义您的 SQL 实例的 ARM 模板,您将运行您的 ARM 模板来创建SQL 实例,将架构和数据部署到 SQL 实例,运行测试,然后取消配置 SQL 实例。

【讨论】:

  • 感谢更详尽的解释。我已经尝试在 VSTS 和 AppVeyor 中使用 Docker,虽然它现在实际安装,但它......不是很快。我在我的问题中添加了信息。如果您愿意提供更多帮助,我将不胜感激!
  • @berkeleybross 不幸的是,在速度方面我能提供的不多。我会先探索 localdb 选项,因为它应该可以最大限度地减少混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2017-10-10
相关资源
最近更新 更多