与许多开发人员共享 Gradle 用户主页有什么缺点吗?
Any Drawbacks of Sharing the Gradle User Home with Many Developers?
问题
简而言之
在同一文件系统上的多个开发人员之间共享 Gradle 用户主目录是否有任何缺点?
更详细
我们的目标是使用本地 Gradle 缓存节省磁盘 space。 Gradle 用户指南建议 the cache is safe for concurrent access。目前似乎没有任何方法可以独立于 Gradle 用户主目录配置缓存位置,因此本质上问题归结为共享 Gradle 用户主目录(默认为 ~/.gradle/
).在快速测试中,我们可以验证同一用户的多个并发进程确实可以在单个 Gradle 用户主目录下正常工作。
但是多用户会有什么问题吗?我可以想象权限问题可能会成为一个问题。有没有人对这种设置有任何经验? Gradle 用户主目录中是否有不应共享的文件?
很明显,某些特定于用户的配置将不再适用于共享用户主页(例如个性化 init scripts or gradle.properties
). Do you perhaps have any better suggestion for saving disk space with the local Gradle cache? Such a suggestion could be to somehow automatically prune the cache of each user as 。
背景
我们使用 Gradle 来处理更大的二进制文件(目前每个大约 500M,并且还在增长)。这包括从其他大型二进制工件构建它们作为输入依赖项。我们将构建工件存储在 Artifactory 中;上传和下载非常顺利。但是,由于我们有大约 50 名开发人员每周都在混合和匹配许多文件,因此每个开发人员的本地 Gradle 缓存增长得相当快。由于所有开发人员都在同一个文件系统上工作,我们正在考虑为所有开发人员共享一个 Gradle 缓存以节省磁盘空间 space.
正如您提到的 ~/.gradle/
,我猜您使用的是 *nix 机器?
然后只需将缓存文件夹设为某个共享文件夹的符号链接,就可以了。缓存将被共享,每个开发者仍然有自己的 Gradle 用户主页。
我刚刚找到 Gradle 开发者 Stefan Oehme wrt 的 this comment。共享 Gradle 用户主页:
Gradle processes will hold locks if they are uncontended (to gain performance). Contention is announced through inter-process communication, which does not work when the processes are isolated in Docker containers.
更清楚的是,他在 a follow-up comment 中陈述(由我突出显示):
There might be other issues that we haven't yet discovered though, since sharing a user home between machines is not a use case we have designed for.
换句话说:Gradle 目前不正式支持在不同机器上共享 Gradle 用户主目录,甚至只是其中的缓存部分。
更新 Gradle 6.1+
Gradle 用户主页仍然不打算共享,但是,现在至少“完全可以复制 [dependency] 缓存”(参见 the user guide)。不确定这对来自不同主机的并发访问意味着什么;它仍然为比之前官方支持的更多共享场景提供了基础。
更新 Gradle 6.4+
Gradle 用户主页仍然不打算共享,但是,Gradle 至少为 sharing the dependency cache 添加了一个选项,例如 containerized/ephemeral在 CI 个场景中构建。
问题
简而言之
在同一文件系统上的多个开发人员之间共享 Gradle 用户主目录是否有任何缺点?
更详细
我们的目标是使用本地 Gradle 缓存节省磁盘 space。 Gradle 用户指南建议 the cache is safe for concurrent access。目前似乎没有任何方法可以独立于 Gradle 用户主目录配置缓存位置,因此本质上问题归结为共享 Gradle 用户主目录(默认为 ~/.gradle/
).在快速测试中,我们可以验证同一用户的多个并发进程确实可以在单个 Gradle 用户主目录下正常工作。
但是多用户会有什么问题吗?我可以想象权限问题可能会成为一个问题。有没有人对这种设置有任何经验? Gradle 用户主目录中是否有不应共享的文件?
很明显,某些特定于用户的配置将不再适用于共享用户主页(例如个性化 init scripts or gradle.properties
). Do you perhaps have any better suggestion for saving disk space with the local Gradle cache? Such a suggestion could be to somehow automatically prune the cache of each user as
背景
我们使用 Gradle 来处理更大的二进制文件(目前每个大约 500M,并且还在增长)。这包括从其他大型二进制工件构建它们作为输入依赖项。我们将构建工件存储在 Artifactory 中;上传和下载非常顺利。但是,由于我们有大约 50 名开发人员每周都在混合和匹配许多文件,因此每个开发人员的本地 Gradle 缓存增长得相当快。由于所有开发人员都在同一个文件系统上工作,我们正在考虑为所有开发人员共享一个 Gradle 缓存以节省磁盘空间 space.
正如您提到的 ~/.gradle/
,我猜您使用的是 *nix 机器?
然后只需将缓存文件夹设为某个共享文件夹的符号链接,就可以了。缓存将被共享,每个开发者仍然有自己的 Gradle 用户主页。
我刚刚找到 Gradle 开发者 Stefan Oehme wrt 的 this comment。共享 Gradle 用户主页:
Gradle processes will hold locks if they are uncontended (to gain performance). Contention is announced through inter-process communication, which does not work when the processes are isolated in Docker containers.
更清楚的是,他在 a follow-up comment 中陈述(由我突出显示):
There might be other issues that we haven't yet discovered though, since sharing a user home between machines is not a use case we have designed for.
换句话说:Gradle 目前不正式支持在不同机器上共享 Gradle 用户主目录,甚至只是其中的缓存部分。
更新 Gradle 6.1+
Gradle 用户主页仍然不打算共享,但是,现在至少“完全可以复制 [dependency] 缓存”(参见 the user guide)。不确定这对来自不同主机的并发访问意味着什么;它仍然为比之前官方支持的更多共享场景提供了基础。
更新 Gradle 6.4+
Gradle 用户主页仍然不打算共享,但是,Gradle 至少为 sharing the dependency cache 添加了一个选项,例如 containerized/ephemeral在 CI 个场景中构建。