Давайте сузим его. до двух этапов: компиляция-тест.
Код: Выделить всё
compile
До сих пор я пробовал ключевое слово «зависимости». Но Gradle, похоже, не использует повторно файлы, что бы я ни делал.
Подтверждение концепции
Доказательство концепции достижимо локально, в Android-студия:
Код: Выделить всё
./gradlew clean
./gradlew compileReleaseKotlin compileReleaseJavaWithJavac
./gradlew --console=plain app: testReleaseUnitTest
Но когда конвейер запускается с ними, я вижу, что gradle снова выполняет все задачи.
Код: Выделить всё
compile:
stage: compile
script:
- ./gradlew --console=plain compileReleaseKotlin compileReleaseJavaWithJavac
artifacts:
paths:
- app/build/
expire_in: 1 days
tests_release:
stage: tests
dependencies:
- compile
script:
- ./gradlew --console=plain app:testReleaseUnitTest
Я даже пытался удалить некоторые команды вручную, вот так
Код: Выделить всё
- ./gradlew --console=plain app:testReleaseUnitTest -x :app:compileGmsReleaseKotlin -x :app:kspGmsReleaseKotlin
Код: Выделить всё
Execution failed for task ':app:processGmsReleaseJavaRes'.
> Querying the mapped value of provider(java.util.Set) before task ':app:compileGmsReleaseKotlin' has completed is not supported
Я также попробовал загрузить артефакты и поместить их в свои локальные файлы. И вроде частично работает. Так может быть проблема в том, что мне нужно как-то применить эти файлы?
TL;DR
Как повторно использовать скомпилированные файлы (папка модуля/сборки) ) для последующих этапов CI в одном конвейере?
Подробнее здесь: https://stackoverflow.com/questions/789 ... ugh-stages