我正在寻找一种解决方案来优化管道执行通过重用先前阶段的编译文件。
让我们将其缩小到两个阶段:
compile - test
。
compile
将共享其构建文件夹给 test
。
到目前为止,我尝试了
dependencies
关键字。但无论我做什么,Gradle 似乎都没有重用这些文件。
概念验证可以在 Android Studio 中本地实现:
./gradlew clean
./gradlew compileReleaseKotlin compileReleaseJavaWithJavac
./gradlew --console=plain app: testReleaseUnitTest
执行测试命令时,我可以看到
compile
、ksp
等任务旁边的所有最新日志。
但是当管道使用这些运行时,我可以看到 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
我还尝试下载工件并将它们放入我的本地文件中。它似乎部分起作用。所以也许问题是我需要以某种方式应用这些文件?
如何在单个管道中的后续 CI 阶段重用已编译的文件(模块/构建文件夹)?
只需将 .gradle 文件夹添加到工件中
...
artifacts:
paths:
- .gradle/
- app/build/