【发布时间】:2020-12-11 18:17:21
【问题描述】:
说明
我正在尝试使用 服务容器 在 azure devops 管道中进行集成数据库测试。
根据这个开源虚拟 ci cd 管道项目https://dev.azure.com/funktechno/_git/dotnet%20ci%20pipelines。我正在尝试使用 azure devops service containers 进行集成管道测试。我让 postgress 和 mysql 工作。我在使用 microsoft sql server 时遇到问题。
yml 文件
resources:
containers:
- container: mssql
image: mcr.microsoft.com/mssql/server:2017-latest
ports:
# - 1433
- 1433:1433
options: -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Express'
- job: unit_test_db_mssql
# condition: eq('${{ variables.runDbTests }}', 'true')
# continueOnError: true
pool:
vmImage: 'ubuntu-latest'
services:
localhostsqlserver: mssql
steps:
- task: UseDotNet@2
displayName: 'Use .NET Core sdk 2.2'
inputs:
packageType: sdk
version: 2.2.207
installationPath: $(Agent.ToolsDirectory)/dotnet
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: Bash@3
inputs:
targetType: 'inline'
script: 'env | sort'
# echo Write your commands here...
# echo ${{agent.services.localhostsqlserver.ports.1433}}
# echo Write your commands here end...
- task: CmdLine@2
displayName: 'enabledb'
inputs:
script: |
cp ./MyProject.Repository.Test/Data/appSettings.devops.mssql.json ./MyProject.Repository.Test/Data/AppSettings.json
- task: DotNetCoreCLI@2
inputs:
command: 'test'
workingDirectory: MyProject.Repository.Test
arguments: '--collect:"XPlat Code Coverage"'
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: 'Cobertura'
summaryFileLocation: '$(Agent.TempDirectory)\**\coverage.cobertura.xml'
数据库连接字符串
{
"sqlserver": {
"ConnectionStrings": {
"Provider": "sqlserver",
"DefaultConnection": "User ID=sa;Password=yourStrong(!)Password;Server=localhost;Database=mockDb;Pooling=true;"
}
}
}
调试
-
我能说的最多的是,当我运行 Bash@3 来检查环境变量 postgres 和 mysql 打印类似于
/bin/bash --noprofile --norc /home/vsts/work/_temp/b9ec7d77-4bc2-47ab-b767-6a5e95ec3ea6.sh "id": "b294d39b9cc1f0d337bdbf92fb2a95f0197e6ef78ce28e9d5ad6521496713708" "pg11": { }- 当 mssql 无法打印 id 时
========================== Starting Command Output =========================== /bin/bash --noprofile --norc /home/vsts/work/_temp/70ae8517-5199-487f-9067-aee67f8437bb.sh } }- 更新这在使用 ubuntu-latest 时不会发生,但仍然有 mssql 连接问题
-
数据库错误记录。
- 我目前正在处理此错误
Error Message: Failed for sqlserver providername:Microsoft.EntityFrameworkCore.SqlServer m:A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)- 在 TestDbContext.cs 我的错误信息是这样的。如果人们有获得更多详细信息的指针,我们将不胜感激。
catch (System.Exception e) { var assertMsg = "Failed for " + connectionStrings.Provider + "\n" + " providername:" + dbContext.Database.ProviderName + " m:"; if (e.InnerException != null) assertMsg += e.InnerException.Message; else assertMsg += e.Message; _exceptionMessage = assertMsg; }
示例管道:https://dev.azure.com/funktechno/dotnet%20ci%20pipelines/_build/results?buildId=73&view=logs&j=ce03965c-7621-5e79-6882-94ddf3daf982&t=a73693a5-1de9-5e3d-a243-942c60ab4775
注意事项
-
我已经知道 azure devops 管道 mssql 服务器在 windows 代理 b/c 中不起作用,它们是 windows server 2019 并且 mssql server 的 windows 容器版本没有得到很好的支持,仅适用于 windows server 2016。它失败了当我这样做时,在初始化容器步骤上。
-
我为 unit_test_db_mssql 尝试了几件事,更改 ubuntu 版本,更改参数,更改 mssql 服务器版本,都给出了相同的错误。
-
如果人们知道在 linux 中可以使用命令行方法来测试 mssql docker 实例是否准备就绪,那么这也可能会有所帮助。
进度更新
- 到目前为止,mssql 在 github 操作 和 gitlab 管道 中工作。
- postgres 和 mysql 在 azure devops 和 bitbucket 管道 上运行良好。
- 让 mssql 在 azure devops 上工作仍然没有运气。虽然它确实提供了正在运行的数据库的大量 docker 详细信息,但它也无法正常工作,但是再一次,没有人真正关心 bitbucket 管道的时间只有 50 分钟。您可以在引用的存储库中看到所有这些管道,它们都是公开的,由于它是开源的,因此也可以进行拉取请求。
【问题讨论】:
-
把
vmImage: 'ubuntu-16.04'改成vmImage: 'ubuntu-latest',我这边打印ID就成功了。可能 ubuntu-16.04 有点老了。 -
检查后,你是对的,这只是我的调试步骤之一。我添加了更多细节,即使在 ubuntu-latest 中我仍然遇到 sql 连接错误。
标签: sql-server docker azure-devops automated-tests azure-pipelines