У меня многопроектная сборка, и я хочу запустить тесты после запуска двух контейнеров Docker. Это мое пользовательское задание:
runTestsWithDocker := Def.taskDyn {
startDirectoryServer.value
val containerId = buildOrStartTestDatabase.value
Def.task {
(test in Test).value
sLog.value.info("running inside dynamic task")
containerId
}
}.value
Как видно из вывода ниже, контейнеры Docker запускаются, и сообщение журнала записывается из динамической задачи. Однако тестовых выходных данных нет (и сборка выполняется слишком быстро для запуска тестов).
> runTestsWithDocker
[info] logging into ECR registry 123456789012.dkr.ecr.us-east-1.amazonaws.com
[info] checking repository for image container1:1.2.3-1200
[info] successfully logged-in to ECR registry 123456789012.dkr.ecr.us-east-1.amazonaws.com
[info] DockerSupport: pulling 123456789012.dkr.ecr.us-east-1.amazonaws.com/container2:latest
[info] DockerSupport: docker run -d -p 389:389 123456789012.dkr.ecr.us-east-1.amazonaws.com/container2:latest
[info] container ID: 80d16a268c6e13dd810f8c271ca8778fc8eaa6835f2d0640fa62d032ff052345
[info] image already exists; no need to build
[info] DockerSupport: pulling 123456789012.dkr.ecr.us-east-1.amazonaws.com/container1:1.2.3-1200
[info] DockerSupport: docker run -d -p 5432:5432 123456789012.dkr.ecr.us-east-1.amazonaws.com/container1:1.2.3-1200
[info] container ID: 2de559b0737e69d61b1234567890123bd123456789012d382ba8ffa40e0480cf
[info] Updating {file:/home/ubuntu/Workspace/mybuild/}mybuild...
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.
[info] running inside dynamic task
[success] Total time: 2 s, completed Jun 5, 2019 9:05:20 PM
Я предполагаю, что моя область действия неверна, и что мне нужно сослаться на test
в какой-то другой области, но я понятия не имею, что это может быть (я пробовал Compile
и ThisBuild
как случайные удары в темноте).
Я также видел (test in Test).result.value
из других вопросов в SO. Думая, что, возможно, задача test
выполняла что-то нестандартное, я попробовал это сделать, но с тем же (не) результатом.
Наконец, я использую SBT 0.13.16, поэтому любой убедительный аргумент (как в сообщении об ошибке), что это проблема с этой версией, заставил бы меня обновиться раньше, чем планировалось (моя текущая цель - реорганизовать сборку затем обновить).
Обновление: вот вывод inspect
. Он не показывает зависимость от test
, но я предполагаю, что это потому, что он вызывается из динамической задачи.
> inspect runTestsWithDocker
[info] Task: java.lang.String
[info] Description:
[info] Runs the test suite, after starting the LDAP server and running/initializing the test database
[info] Provided by:
[info] {file:/home/ubuntu/Workspace/mybuild/}mybuild/*:runTestsWithDocker
[info] Defined at:
[info] /home/ubuntu/Workspace/mybuild/build.sbt:597
[info] Dependencies:
[info] mybuild/*:buildOrStartTestDatabase
[info] mybuild/*:startDirectoryServer
[info] mybuild/*:settingsData
[info] Reverse dependencies:
[info] mybuild/*:publishTestDatabase
[info] Delegates:
[info] mybuild/*:runTestsWithDocker
[info] {.}/*:runTestsWithDocker
[info] */*:runTestsWithDocker
Обновление: если я указываю один подпроект, он корректно выполняет задачи в этом подпроекте.
runTestsWithDocker := Def.taskDyn {
startDirectoryServer.value
val containerId = buildOrStartTestDatabase.value
Def.task {
(test in (subproject,Test)).result.value
containerId
}
}.value
Похоже, что корневой проект не агрегирует? Мы полагаемся на проект «root по умолчанию», поэтому я думаю, что моим следующим изменением будет создание явного корневого проекта.