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

如何将Docker容器中生成的C#单元测试结果发布至Azure Blob存储?

把Docker容器内的.NET单元测试TRX文件上传到Azure Blob存储的几种方案

我来给你梳理几个实际项目里常用的实现思路,你可以根据自己的部署场景挑最适合的:

方案1:容器内直接上传(适合容器能访问Azure的场景)

如果你的Docker容器可以直接连接到Azure服务,那直接在容器内部完成测试+上传是最直接的方式:

  1. 确保容器内有Azure CLI工具
    你可以在Dockerfile里基于官方.NET SDK镜像安装Azure CLI,比如:

    FROM mcr.microsoft.com/dotnet/sdk:7.0
    # 安装Azure CLI
    RUN apt-get update && apt-get install -y curl && \
        curl -sL https://aka.ms/InstallAzureCLIDeb | bash
    
  2. 运行单元测试生成TRX文件
    在容器内执行测试命令,指定TRX日志格式和结果目录:

    dotnet test --logger "trx;LogFileName=TestResults.trx" --results-directory ./TestResults
    
  3. 配置Azure凭据并上传
    推荐用环境变量传递存储账户信息(避免硬编码密钥),然后用Azure CLI上传:

    • 运行容器时传入环境变量:
      docker run -e AZURE_STORAGE_ACCOUNT="your-storage-account" \
                 -e AZURE_STORAGE_KEY="your-storage-key" \
                 your-test-image
      
    • 容器内的上传命令(可以加到容器的启动脚本里):
      # 给文件加时间戳,避免覆盖旧结果
      TIMESTAMP=$(date +%Y%m%d_%H%M%S)
      az storage blob upload --account-name $AZURE_STORAGE_ACCOUNT \
                             --account-key $AZURE_STORAGE_KEY \
                             --container-name "your-blob-container" \
                             --file ./TestResults/TestResults.trx \
                             --name "TestResults_$TIMESTAMP.trx"
      

    如果是在Azure托管服务(比如AKS、App Service容器)上运行,优先用**托管身份(Managed Identity)**代替密钥,更安全:

    az login --identity
    az storage blob upload --account-name $AZURE_STORAGE_ACCOUNT \
                           --container-name "your-blob-container" \
                           --file ./TestResults/TestResults.trx \
                           --name "TestResults_$TIMESTAMP.trx"
    

方案2:先复制到宿主机,再上传(适合容器无法直接访问Azure的场景)

如果容器网络受限没法连Azure,那可以先把TRX文件拷贝到宿主机,再从宿主机上传:

  1. 挂载宿主机目录到容器
    运行容器时,把宿主机的一个目录挂载到容器的测试结果目录,测试生成的TRX文件会自动同步到宿主机:

    docker run -v /host/machine/test-results:/app/TestResults \
               your-test-image \
               dotnet test --logger "trx" --results-directory /app/TestResults
    
  2. 从宿主机上传到Blob存储
    宿主机安装Azure CLI或AzCopy后执行上传:

    • 用Azure CLI:
      TIMESTAMP=$(date +%Y%m%d_%H%M%S)
      az storage blob upload --account-name "your-storage-account" \
                             --account-key "your-storage-key" \
                             --container-name "your-blob-container" \
                             --file /host/machine/test-results/*.trx \
                             --name "TestResults_$TIMESTAMP.trx"
      
    • 用AzCopy(大文件更高效):
      azcopy copy "/host/machine/test-results/*.trx" \
                 "https://your-storage-account.blob.core.windows.net/your-blob-container?your-sas-token"
      

方案3:在CI/CD流程中处理(适合自动化测试场景)

如果你的Docker测试是在CI/CD流水线(比如Azure DevOps、GitHub Actions)里跑的,直接在流水线里完成文件拷贝和上传:

  1. 从运行中的容器拷贝TRX文件到流水线工作目录

    # 获取容器ID
    CONTAINER_ID=$(docker ps -q --filter "name=your-test-container")
    # 拷贝文件到本地
    docker cp $CONTAINER_ID:/app/TestResults/TestResults.trx ./TestResults/
    
  2. 用CI/CD内置任务上传

    • 在Azure DevOps里,用Azure File Copy任务,直接指定TRX文件路径和Blob存储目标位置即可。
    • 在GitHub Actions里,先登录Azure再用CLI上传:
      - name: Login to Azure
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}
      
      - name: Upload TRX to Blob Storage
        run: |
          TIMESTAMP=$(date +%Y%m%d_%H%M%S)
          az storage blob upload --account-name "your-storage-account" \
                                 --container-name "your-blob-container" \
                                 --file ./TestResults/TestResults.trx \
                                 --name "TestResults_$TIMESTAMP.trx"
      

一些注意事项

  • 给TRX文件加时间戳或唯一标识,避免覆盖历史测试结果。
  • 确保上传身份拥有Blob存储的Storage Blob Data Contributor权限,防止权限不足报错。
  • 测试前可以先在容器内检查./TestResults目录,确认TRX文件已正确生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:18