运行 sql Azure DevOps 上的服务器真实数据库测试
Run sql server real database tests on Azure DevOps
我有一个玩具应用程序,其中包含一些涉及连接到真实 sql 服务器数据库的测试。测试在我的本地机器上通过了。我想让他们通过 Azure Devops。这里的全部目的是针对 ADO 上的真实数据库测试我们的真实应用 运行ning。我不想切换到内存数据库。
我设想的过程如下所示。但如果可以实现我的目的,我愿意接受不同的过程:
- 使用 sql 服务器启动一个 Docker 容器。
- 运行 我的测试指向容器内的数据库。
- 删除容器。
我有一个启动 sql 服务器的 hello-world yml 脚本。它是我通过 and published at https://developercommunity.visualstudio.com/content/problem/1159426/working-examples-using-service-container-of-sql-se.html 找到的脚本的简化版本。当我 运行 它作为管道时,它成功了:
containers:
- container: mssql
image: mcr.microsoft.com/mssql/server:2017-latest
env:
ACCEPT_EULA: Y
SA_PASSWORD: Aaaaaa1!
MSSQL_PID: Express
ports:
- 1433:1433
options: --name mssql
trigger:
- none
variables:
system.debug: true
pool:
vmImage: 'ubuntu-16.04'
jobs:
- job: unit_test_db_mssql
services:
mssql: mssql
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Write your PowerShell commands here.
start-sleep -s 10
- task: CmdLine@2
inputs:
script: 'docker logs mssql'
- task: CmdLine@2
inputs:
script: 'npm install mssql'
workingDirectory: '$(build.sourcesdirectory)'
- task: CmdLine@2
inputs:
script: 'sqlcmd -S localhost -d master -U sa -P Aaaaaa1! -Q "SELECT @@version;"'
我还有一个 运行 我的 sql 服务器测试脚本。当我 运行 这个脚本时,脚本成功,测试失败,这是预料之中的,因为没有 sql 他们可以指向的服务器数据库。这是脚本:
- main
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
SqlServerApp.Tests\bin\Release\netcoreapp3.1\SqlServerApp.Tests.dll
searchFolder: '$(System.DefaultWorkingDirectory)'
问题是将两者结合起来。第一个脚本使用 vmImage 'ubuntu-16.04',第二个脚本使用 'windows-latest'。如果我在 ubuntu-16.04 上将 windows 更改为 运行,则 VsBuild 步骤失败:
##[error]The current operating system is not capable of running this task. That typically means the task was written for Windows only. For example, written for Windows Desktop PowerShell.
如果我将 ubuntu 更改为使用 'windows-latest',它也会失败:
2020-11-27T14:50:26.1749476Z 2017-latest: Pulling from mssql/server
2020-11-27T14:50:26.2353797Z image operating system "linux" cannot be used on this platform
2020-11-27T14:50:26.7933543Z ##[error]Docker pull failed with exit code 1
我该如何解决这个问题?
您不能使用 VSBuild 或 VSTest 任务,因为 Linux 没有 Visual Studio。
但是我注意到使用 dotnet core。所以请将您的任务更改为使用 dotnet command line tasks.
所以你需要使用
- dotnet 恢复
- dotnet 构建
- 网络测试
他们已经准备好继续 ubuntu
托管代理。
我有一个玩具应用程序,其中包含一些涉及连接到真实 sql 服务器数据库的测试。测试在我的本地机器上通过了。我想让他们通过 Azure Devops。这里的全部目的是针对 ADO 上的真实数据库测试我们的真实应用 运行ning。我不想切换到内存数据库。
我设想的过程如下所示。但如果可以实现我的目的,我愿意接受不同的过程:
- 使用 sql 服务器启动一个 Docker 容器。
- 运行 我的测试指向容器内的数据库。
- 删除容器。
我有一个启动 sql 服务器的 hello-world yml 脚本。它是我通过
containers:
- container: mssql
image: mcr.microsoft.com/mssql/server:2017-latest
env:
ACCEPT_EULA: Y
SA_PASSWORD: Aaaaaa1!
MSSQL_PID: Express
ports:
- 1433:1433
options: --name mssql
trigger:
- none
variables:
system.debug: true
pool:
vmImage: 'ubuntu-16.04'
jobs:
- job: unit_test_db_mssql
services:
mssql: mssql
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Write your PowerShell commands here.
start-sleep -s 10
- task: CmdLine@2
inputs:
script: 'docker logs mssql'
- task: CmdLine@2
inputs:
script: 'npm install mssql'
workingDirectory: '$(build.sourcesdirectory)'
- task: CmdLine@2
inputs:
script: 'sqlcmd -S localhost -d master -U sa -P Aaaaaa1! -Q "SELECT @@version;"'
我还有一个 运行 我的 sql 服务器测试脚本。当我 运行 这个脚本时,脚本成功,测试失败,这是预料之中的,因为没有 sql 他们可以指向的服务器数据库。这是脚本:
- main
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
SqlServerApp.Tests\bin\Release\netcoreapp3.1\SqlServerApp.Tests.dll
searchFolder: '$(System.DefaultWorkingDirectory)'
问题是将两者结合起来。第一个脚本使用 vmImage 'ubuntu-16.04',第二个脚本使用 'windows-latest'。如果我在 ubuntu-16.04 上将 windows 更改为 运行,则 VsBuild 步骤失败:
##[error]The current operating system is not capable of running this task. That typically means the task was written for Windows only. For example, written for Windows Desktop PowerShell.
如果我将 ubuntu 更改为使用 'windows-latest',它也会失败:
2020-11-27T14:50:26.1749476Z 2017-latest: Pulling from mssql/server
2020-11-27T14:50:26.2353797Z image operating system "linux" cannot be used on this platform
2020-11-27T14:50:26.7933543Z ##[error]Docker pull failed with exit code 1
我该如何解决这个问题?
您不能使用 VSBuild 或 VSTest 任务,因为 Linux 没有 Visual Studio。
但是我注意到使用 dotnet core。所以请将您的任务更改为使用 dotnet command line tasks.
所以你需要使用
- dotnet 恢复
- dotnet 构建
- 网络测试
他们已经准备好继续 ubuntu
托管代理。