Запуск с томом для файлов, созданных во время сборки докера - PullRequest
0 голосов
/ 26 ноября 2018

Я использую 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 Ответ

0 голосов
/ 26 ноября 2018

Срок службы вашего контейнера может быть очень приблизительно представлен как

docker build

  • точечный тест -> codecoveragereports /

docker run -v

  1. том для подключения докера $PWD/codecoveragereports до codecoveragereports, это затенило предыдущий 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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...