使用Gradle Wrapper构建子项目,同时保持Docker映像苗条

lan*_*lde 5 continuous-integration gradle docker circleci

我有一个要在CircleCI上进行构建和测试的多项目Gradle构建,然后将生成的图像上传到Google Container Repository。

在根目录中使用Gradle Wrapper(gradlew)设置项目。例如,我可以从根目录中调用

./gradlew :backend:api:build

这将构建子项目并生成一个胖子罐。我打算在最终的Docker映像中放入并部署这个胖子。为了使Docker映像尽可能小,我在每个子项目目录中都放置了一个Dockerfile。我要做的只是例如复制/root/backend/api到Docker映像中,并构建该子项目。这就是我遇到麻烦的地方。当我尝试

RUN ./gradlew :backend:api:build

放置在Dockerfile中的root/backend/api结果为/bin/sh: 1: ./gradlew: not found。这是预期的,因为./gradlew仅在根目录中可用。我试图了解在这种情况下是否有最佳实践。我考虑过的一些选择是:

  1. ./gradlew文件放在每个子项目目录中。感到多余和不好。
  2. 将整个存储库复制到映像中,而不只是复制/backend/api。这样会产生更大的图像,也感觉多余。
  3. 使用包装器跳过。我认为结果不太理想吗?

任何建议将不胜感激!