7
votes

obtenir un serveur SQL (express) lors d'une construction de pipeline azure devops

Je mets en place un pipeline pour l'application asp.net. Pendant la tâche des tests d'intégration, je dois me connecter à un serveur SQL. Comment puis-je dire au pipeline que j'ai besoin d'un service SQL?

J'ai essayé avec plusieurs pools d'agents hébergés par Microsoft (Windows Server 1803, hébergé 2017 et 2019) J'utilise Windows Server 1803 et le problème est:

Le système d'exploitation du conteneur ne correspond pas au système d'exploitation de l'hôte.

Je voudrais configurer correctement un serveur sql temporairement pour exécuter des tests.

J'ai utilisé localdb à la place.

J'exécute ce script avant ma tâche de tests d'intégration

SqlLocalDB.exe create "DeptLocalDB"  
SqlLocalDB.exe share "DeptLocalDB" "DeptSharedLocalDB"  
SqlLocalDB.exe start "DeptLocalDB"  
SqlLocalDB.exe info "DeptLocalDB"

Pour me connecter avec PowerShell: Invoke-Sqlcmd -Query "SELECT GETDATE () AS TimeOfQuery; " -ServerInstance "(localdb) \. \ DeptSharedLocalDB"

Pour se connecter avec sqlcmd: sqlcmd -S (localdb) \. \ DeptSharedLocalDB

Pour connecter l'application ac # (connectionString): "Data Source = (localdb) \. \ DeptS haredLocalDB; Initial Catalog = DeptLocalDB; Integrated Security = True; "

Si quelqu'un sait comment monter un serveur SQL dans un conteneur sur un pipeline azure, il sera apprécié. Merci d'avoir lu p>


0 commentaires

4 Réponses :


5
votes

Chocolatey est installé sur windows-latest .

Donc, si vous définissez dans votre fichier YAML:

 - script: choco install sql-server-express

vous pouvez alors installer SQL Server Express utilisant choco:

  pool:
    vmImage: windows-latest


2 commentaires

Cela fonctionne, mais l'étape prend près de quatre minutes. Est-il possible de l'accélérer? La chaîne de connexion du projet de test d'intégration ou du projet utilisant ce SQLEXPRESS est-elle toujours la même?


@ToreAurstad Il est plus rapide d'utiliser LocalDB qui est inclus. L'utilisation de SQLExpress depuis Docker est également plus rapide.



1
votes

Dans mon cas (certains tests d'intégration .NET Core qui nécessitaient LocalDB), le simple fait d'utiliser l'image windows-latest a fait le travail:

pool:
  vmImage: 'windows-latest'

L'image est fourni avec Visual Studio qui inclut LocalDB .


0 commentaires

1
votes

Voici un exemple complet de la façon dont j'ai réalisé des tests d'intégration à l'aide de Sql Express dans Azure Devops. J'ai dû utiliser les pipelines basés sur YAML pour pouvoir utiliser l'approche de simonauner en utilisant Chocolatey pour installer Sql Express. Notez que j'ai dû installer les outils EF Core car j'utilise .Net Core 3.1 dans ce pipeline. Notez également que je génère un fichier SQL de migration EF Code First à la volée afin que l'instance SQL Express truquée soit remplie de contenu.

Déployer l'instance SQL Express dans Azure Devops, installer, générer et exécuter la première migration EF Code script sql pour mettre à jour la base de données avec le schéma et les données de départ à l'aide des outils EF Code First.

# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- feature/testability

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- script: choco install sql-server-express
- task: NuGetToolInstaller@1

- task: VisualStudioTestPlatformInstaller@1
  displayName: 'Visual Studio Test Platform Installer'
  inputs:
    versionSelector: latestStable

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration Debug' # Update this to match your need

- script: 'dotnet tool install --global dotnet-ef'
  displayName: 'Generate EF Code First Migrations SQL Script Update script'

- script: 'dotnet ef migrations script -i -o %BUILD_ARTIFACTSTAGINGDIRECTORY%\migrate.sql --project .\SomeAcme\SomeAcme.csproj'
  displayName: 'Generate EF Code First Migrations migrate.sql'

- script: 'sqlcmd -S .\SQLEXPRESS -Q "CREATE DATABASE [SomeAcmeDb]"'
  displayName: 'Create database SomeAcmeDb in Azure Devops SQL EXPRESS'

- script: 'sqlcmd -i %BUILD_ARTIFACTSTAGINGDIRECTORY%\migrate.sql -S .\SQLEXPRESS -d SomeAcmeDb'
  displayName: ' Run migrate.sql on SQL EXPRESS in Azure Devops'

# PowerShell
# Run a PowerShell script on Linux, macOS, or Windows
- task: PowerShell@2
  inputs:
    targetType: 'inline' # Optional. Options: filePath, inline
    #filePath: # Required when targetType == FilePath
    #arguments: # Optional
    script: 'gci -recurse -filter *.dll' # Required when targetType == Inline
    #errorActionPreference: 'stop' # Optional. Options: stop, continue, silentlyContinue
    #failOnStderr: false # Optional
    #ignoreLASTEXITCODE: false # Optional
    #pwsh: false # Optional
    #workingDirectory: # Optional

- task: VSTest@2
  displayName: 'VsTest - testAssemblies'
  inputs:
    testAssemblyVer2: |
     **\*SomeAcme.Tests.dll
     !**\*TestAdapter.dll
     !**\obj\**
    vsTestVersion: toolsInstaller
    testFiltercriteria: 'Category=IntegrationTest'
    runInParallel: false
    codeCoverageEnabled: false
    testRunTitle: 'XUnit tests SomeAcme solution integration test starting'
    failOnMinTestsNotRun: true
    rerunFailedTests: false


0 commentaires

0
votes

azure-pipelines.yml:

Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=my-db;Integrated Security=True;

Une fois que la chaîne de connexion suivante est valide:

pool:
  vmImage: 'windows-latest'

...

- task: PowerShell@2
  displayName: 'start mssqllocaldb'
  inputs:
    targetType: 'inline'
    script: 'sqllocaldb start mssqllocaldb'

Source:

https://www.jannikbuschke.de/blog/azure-devops -enable-mssqllocaldb /


0 commentaires