2017-03-06 96 views
0

我使用基于容器的CI/CD系统设置了Gradle,该系统具有拆分构建与运行环境。在构建中,项目的磁盘是可写的。在运行时,只有选定的目录是可写的,而这些目录在构建期间不可用。两者明显分开。gradle包装器需要写入哪些文件才能运行?

我遇到的问题是在构建步骤中运行gradlew build,但在生产环境中(在只读文件系统上)运行gradlew run失败。具体来说,它在运行时会尝试再次重新编译项目,并且无法这样做(自然,因为文件系统是只读的)。但是,如果它已经被编译了,为什么它会重新编译?

我试图使build.gradle目录两种运行时可写。这确实有效,然后gradlew将再次重新编译整个系统,写出这些目录并运行。如果我然后再次使build目录只读,它将继续工作。这对我来说意味着还有的.gradle某些部分需要在运行时可写的,但到目前为止,我还没有发现比“一切,一切”,这显然是不可取的其他的作品的组合。 (这么做其实就是一次构建,然后用目录安装摆弄是不可行的生产实践中,因为它不是那么重复的版本。)

我仍然相当新的摇篮,所以我不知道是什么原因是。我最好的理论是,gradlew想开始重新下载gradle这个(即使它可能已经在.gradle?)导致它跳过所有预先存在生成的文件,即使他们存在。这就是为什么有一个成功的构建可以修复它的未来版本,即使build目录是只读的。

所以我的问题一般是.gradle的哪些部分需要在运行时可写,以便Gradle构建的应用程序能够在只读环境中工作?或者,更一般地说,我该如何在一个只读环境中创建一个Gradle构建的应用程序?

+0

你不应该使用gradlew运行之间在生产项目。只需执行/部署由版本生成的人工制品。 –

回答

1

不要使用摇篮在生产时间运行项目。 Gradle是一个构建工具,application插件添加的run任务仅用于测试目的。如果你不希望产生一个分发,然后使用,在生产时间,但如果你想往外跑项目目录中,至少使用installDist在制作的时候,然后,因为它装配在build/install/...与运行项目生成的启动脚本。

相关问题