代码之家  ›  专栏  ›  技术社区  ›  Dave New

对Docker构建期间生成的文件使用卷运行

  •  0
  • Dave New  · 技术社区  · 6 年前

    我正在使用Docker运行单元测试,生成cobertura代码覆盖率结果,然后生成关于这个的HTML报告(使用 ReportGenerator )然后,我将代码覆盖率结果文件和HTML报告发布到vsts devops。

    以下是我需要运行的命令:

    # Generates coverage.cobertura.xml for use in the next step.
    dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=codecoveragereports/
    
    # Generates HTML reports from coverage.cobertura.xml file.
    dotnet reportgenerator -reports:app/test/MyApplication.UnitTests/codecoveragereports/coverage.cobertura.xml -targetdir:codecoveragereports -reportTypes:htmlInline
    

    现在在Dockerfile:

    WORKDIR ./app/test/MyApplication.UnitTests/
    
    RUN dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=codecoveragereports/
    
    ENTRYPOINT ["/bin/bash", "-c", "dotnet reportgenerator -reports:codecoveragereports/*.xml -targetdir:codecoveragereports -reportTypes:htmlInline"]
    

    建立形象:

    docker build -t myapplication.tests -f dockerfile --target tester .
    

    并运行它:

    docker run --rm -it -v $PWD/codecoveragereports:/app/test/MyApplication.UnitTests/codecoveragereports myapplication.tests:latest
    

    问题:

    生成的结果文件 dotnet test 是否生成(我可以用 RUN dir ,但当我指定一个卷(使用 -v docker run .

    是否无法在图像中生成的文件上创建卷 docker build ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Siyu Zeeshan Akhter    6 年前

    你的容器的寿命可以粗略地表示为

    docker build

    • 点测试-->codecoveragereports/

    docker run -v

    1. Docker安装卷 $PWD/codecoveragereports codecoveragereports ,这掩盖了前一个 编解码器覆盖报告
    2. 你的入口脚本

    所以你需要输出 dot test 到一个临时文件夹,然后在运行时(在入口点)将其复制到装入点。

    文档文件

    COPY init.sh /
    dot test --> /temp/
    ENTRYPOINT ['/bin/bash', '/init.sh']
    

    英特

    cp /temp /app/test/MyApplication.UnitTests/codecoveragereports
    exec ["/bin/bash", "-c", "dotnet reportgenerator -reports:codecoveragereports/*.xml -targetdir:codecoveragereports -reportTypes:htmlInline"]