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

Azure Pipeline中Ubuntu18.04容器运行dotnet test环境不符问题求助

解决Azure Pipeline中Ubuntu18.04容器内执行dotnet test的环境问题

问题原因

你当前的配置仅启动了Ubuntu18.04容器,但dotnet test命令仍在宿主Ubuntu20.04代理环境中执行,并未进入容器内部,因此检测到的是宿主系统版本。

解决方案

方案1:手动构建测试容器并在内部执行测试

  1. 编写Dockerfile
    在项目根目录创建Dockerfile,基于Ubuntu18.04配置测试所需环境:

    FROM ubuntu:18.04
    
    # 更新系统并安装基础依赖
    RUN apt-get update && apt-get install -y wget apt-transport-https gnupg2
    
    # 安装对应版本的.NET SDK(替换为你的项目依赖版本,比如6.0)
    RUN wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    RUN dpkg -i packages-microsoft-prod.deb
    RUN apt-get update && apt-get install -y dotnet-sdk-6.0
    
    # 安装Docker(TestContainers需要容器运行环境)
    RUN apt-get install -y docker.io
    
  2. Azure Pipeline配置步骤
    在pipeline yaml中添加构建镜像、验证环境、执行测试的步骤:

    steps:
    # 构建Ubuntu18.04测试镜像
    - script: docker build -t cosmos-test-ubuntu1804 .
      displayName: 'Build Ubuntu18.04 test image'
    
    # 验证容器系统版本
    - script: docker run --rm cosmos-test-ubuntu1804 cat /etc/os-release
      displayName: 'Verify container OS version'
    
    # 挂载项目目录与Docker socket,在容器内执行测试
    - script: docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v $(System.DefaultWorkingDirectory):/app -w /app cosmos-test-ubuntu1804 dotnet test --configuration Release
      displayName: 'Run tests in Ubuntu18.04 container'
    

    其中-v /var/run/docker.sock:/var/run/docker.sock用于让容器内的TestContainers调用宿主的Docker服务。

方案2:使用Azure Pipeline容器化作业

直接将整个测试作业指定在Ubuntu18.04容器内执行,无需手动管理容器生命周期:

jobs:
- job: RunCosmosTests
  # 指定作业运行在Ubuntu18.04容器中
  container:
    image: ubuntu:18.04
    options: "-v /var/run/docker.sock:/var/run/docker.sock"
  steps:
  # 安装项目依赖的.NET SDK
  - task: UseDotNet@2
    inputs:
      packageType: 'sdk'
      version: '6.0.x' # 替换为你的项目SDK版本
      installationPath: /usr/share/dotnet

  # 执行测试
  - script: dotnet test --configuration Release
    displayName: 'Run Cosmos tests'

关键注意事项

  • 确保.NET SDK版本与项目依赖匹配,避免兼容性问题
  • 必须挂载Docker socket,否则TestContainers无法在容器内部启动Cosmos模拟容器
  • 测试前可通过cat /etc/os-release或lsb_release -a命令再次验证容器内的系统版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:40:10