You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需自托管代理,Azure DevOps管道中用Linux SQL镜像做.NET Framework集成测试可行吗?

解决方案:无需自托管代理即可实现需求

不用自托管构建代理完全可以实现,但不能采用两个独立作业的方案——Azure DevOps托管代理的作业之间是网络隔离的,不同作业的代理实例不在同一网络环境,Windows作业无法访问Linux作业中的SQL Server,而且也没法让Linux作业持续等待Windows作业完成。

正确的做法是在同一个作业内使用服务容器(Service Containers),把SQL Server Linux镜像作为服务容器启动,和运行.NET Framework集成测试的Windows托管代理共享同一网络,具体可以满足你提到的三点需求:

  1. 自动等待服务容器就绪后执行测试:Azure DevOps会自动检测服务容器的健康状态,只有当SQL Server完全启动就绪后,才会执行后续的测试步骤,无需手动控制启动顺序。
  2. 服务容器持续运行至作业结束:服务容器会和当前作业绑定,只要作业未完成(包括测试步骤执行期间),服务容器就会保持运行状态,直到整个作业结束后才会被销毁。
  3. Windows作业直接连接SQL Server:同一作业内的服务容器和主代理处于同一虚拟网络,测试代码可以通过服务容器的别名(管道配置中定义的名称)作为主机名连接SQL Server,比如连接字符串使用 Server=sql-container,1433;...。

示例YAML管道配置

jobs:
- job: RunIntegrationTests
  pool:
    vmImage: 'windows-latest' # 使用Windows托管代理运行.NET Framework测试
  services:
    sql-container: # 定义服务容器的别名,后续连接用这个名称
      image: 'mcr.microsoft.com/mssql/server:2022'
      env:
        SA_PASSWORD: 'YourStrong!Passw0rd'
        ACCEPT_EULA: 'Y'
      ports:
        - 1433:1433
  steps:
  - task: NuGetToolInstaller@1
  - task: NuGetCommand@2
    inputs:
      restoreSolution: '**/*.sln'
  - task: VSBuild@1
    inputs:
      solution: '**/*.sln'
      platform: 'Any CPU'
      configuration: 'Release'
  - task: VSTest@2
    inputs:
      testSelector: 'testAssemblies'
      testAssemblyVer2: '**/*Tests.dll'
      searchFolder: '$(System.DefaultWorkingDirectory)'
      overrideTestrunParameters: '-ConnectionString "Server=sql-container,1433;Database=YourDB;User ID=sa;Password=YourStrong!Passw0rd;"'

关键注意事项

  • 确保SQL Server的SA密码符合复杂度要求,否则容器启动会失败。
  • .NET Framework测试项目的连接字符串要使用服务容器的别名作为主机名,不需要IP地址,因为同一网络内容器名可直接解析。
  • 如果你的自定义镜像包含初始化好的数据库,直接替换 image 字段为你的镜像地址即可,无需额外配置初始化脚本。

内容的提问来源于stack exchange,提问作者stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:22:10