批量运行Docker构建期间生成的文件

时间:2018-11-26 14:32:20

标签: docker dockerfile

我正在使用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进行测试),但是当我在{{1上指定一个卷(使用-v)时似乎消失了}}。

是否无法在docker run期间在映像中生成的文件上创建卷?

1 个答案:

答案 0 :(得分:1)

您的容器的寿命可以大致表示为

docker build

  • 点测试-> codecoveragereports /

docker run -v

  1. 从docker挂载卷$PWD/codecoveragereportscodecoveragereports,这掩盖了之前的codecoveragereports
  2. 您的入口点脚本

因此,您需要将dot test输出到临时文件夹,然后在运行时将其复制到安装点(在入口点)。

dockerfile

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

init.sh

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