Sql server 如何让MSSQL服务容器在Azure DevOps管道中工作? 描述
我正在azure devops管道中试用用于集成数据库测试的服务容器 根据这个开源虚拟ci cd管道项目。我在用azure devops进行集成管道测试。我有postgress和mysql来工作。我对microsoft sql server有问题 yml文件Sql server 如何让MSSQL服务容器在Azure DevOps管道中工作? 描述,sql-server,docker,azure-devops,automated-tests,azure-pipelines,Sql Server,Docker,Azure Devops,Automated Tests,Azure Pipelines,我正在azure devops管道中试用用于集成数据库测试的服务容器 根据这个开源虚拟ci cd管道项目。我在用azure devops进行集成管道测试。我有postgress和mysql来工作。我对microsoft sql server有问题 yml文件 resources: containers: - container: mssql image: mcr.microsoft.com/mssql/server:2017-latest ports: #
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;"
}
}
}
调试
/bin/bash--noprofile--norc/home/vsts/work/_temp/b9ec7d77-4bc2-47ab-b767-6a5e95ec3ea6.sh
“id”:“b294d39b9cc1f0d337bdbf92fb2a95f0197e6ef78ce28e9d5ad6521496713708”
“第11页”:{
}
- 而mssql无法打印id
===========================================开始命令输出===========================
/bin/bash--noprofile--norc/home/vsts/work/_temp/70ae8517-5199-487f-9067-aee67f8437bb.sh
}
}
- 更新使用ubuntu最新版本时不会发生这种情况,但仍然存在mssql连接问题
- 我目前正在处理此错误
错误消息:
sqlserver失败
providername:Microsoft.EntityFrameworkCore.SqlServer m:建立到SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:TCP提供程序,错误:40-无法打开到SQL Server的连接)
- 在TestDbContext.cs中,我的错误消息如下。如果人们有获得更多细节的指针,将不胜感激
catch(系统异常e)
{
var assertMsg=“对于“+ConnectionString.Provider+”\n“+”providername:“+dbContext.Database.providername+”m:”失败;
如果(例如,InnerException!=null)
assertMsg+=e.InnerException.Message;
其他的
assertMsg+=e.消息;
_exceptionMessage=assertMsg;
}
- 我已经知道azure devops管道mssql服务器在windows代理b/c中不起作用,它们是windows server 2019,mssql服务器的windows容器版本不受良好支持,仅适用于windows server 2016。当我这样做时,初始化容器步骤失败
- 我尝试了几件关于单元测试的事情,改变ubuntu版本,改变参数,改变mssql服务器版本,都给出了相同的错误
- 如果人们知道在linux中使用命令行方法来测试mssql docker实例是否准备就绪,这可能也会有所帮助
- 到目前为止,已在github操作中使用mssql和gitlab管道
- postgres和mysql在azure devops和bitbucket管道上运行良好
- 在azure devops上使用mssql仍然不走运。虽然bitbucket提供了很多运行数据库的docker详细信息,但也没有人真正关心bitbucket管道的50分钟。您可以在引用的存储库中看到所有这些管道,它们都是公共的,拉取请求也是可能的,因为它是开源的
- task: PowerShell@2
displayName: 'delay 10'
inputs:
targetType: 'inline'
script: |
# Write your PowerShell commands here.
start-sleep -s 10
获取要工作的数据库连接。我假设mssql docker容器到那时可能已经准备好了。我在过去几天里遇到了这个问题,并在您的帖子中找到了它。我也有同样的行为,然后有些事情发生了 重要提示:如果在Windows上使用PowerShell运行这些命令,请使用双引号而不是单引号 那张便条是我的 我相信从
选项:-e'ACCEPT_EULA=Y'-e'SA_PASSWORD=yourlstrong(!)PASSWORD'-e'MSSQL\u PID=Express'
到
选项:-e“ACCEPT_EULA=Y”-e“SA_PASSWORD=yourlstrong(!)PASSWORD”-e“MSSQL_PID=Express”
应该让它工作起来。我认为这也很有趣,在你上面发布的链接中,密码作为自己的一行传递进来,这可能解决了这个问题,不一定是10秒的延迟。(下面的例子)
将
vmImage:'ubuntu-16.04'
更改为vmImage:'ubuntu-latest'
,它将成功地在我的一侧打印ID。也许ubuntu-16.04有点旧。检查后,你是对的,这只是我调试的一个步骤。我已经添加了更多的细节,即使是在ubuntu最新版本中,我仍然得到一个sql连接错误。这与开发操作管道的所有实例无关,因为他们在linux机器上使用docker VM,所以powershell甚至没有使用。实际上,你不能在azure devops windows容器b/c中运行数据库docker。它们实际上不受支持(我认为它实际上是windows容器,而不是docker)。好吧,我无法使用单引号使其工作,但一旦我切换到双引号,它就开始工作了。也不需要10秒的延迟。这是在哪种环境下?github、azure devops、gitlab?azure devops管道
- container: mssql
image: mcr.microsoft.com/mssql/server:2017-latest
env:
ACCEPT_EULA: Y
SA_PASSWORD: Password123
MSSQL_PID: Express