Zadig 构建缓存如何配置才好用?
Zadig 过去支持使用 对象存储 作为构建的缓存介质,从 v1.10.0 版本开始,同时支持了 对象存储 和 PVC 两种类型的构建缓存介质,方便用户根据业务需求选择合适的缓存介质来提升构建效率。但是实际采用过程中,如何配置才能更满足我的使用场景呢?
下述将介绍 Zadig 中构建缓存的使用方法,并结合 Java / Golang / NodeJS 不同场景,给出构建缓存的最佳实践配置方式。
如何使用构建缓存?
Zadig 很重视用户体验,为开发者提供 source->可靠交付物 的最短路径,故在构建缓存的配置中,分别从 集群级别 和 应用级别 进行配置:
在低频操作的集群管理中配置缓存介质
在高频操作的应用构建中配置缓存路径
通过下述两步配置,运行在指定集群的构建任务即可使用相应的存储介质作为构建缓存。
1、配置集群级别的缓存介质
在集群管理中,可以针对每个集群配置缓存介质 (对象存储 或 PVC),详情参见产品文档:缓存资源配置
2、配置应用构建使用缓存
在应用构建的高级配置中,进行缓存使用的配置,选择 是否开启缓存 和 缓存目录 ,详情参见产品文档:构建高级配置
如何选择缓存存储介质?
对象存储 和 PVC 两种存储介质在 构建效率 和 缓存隔离性 方面存在一定的差异,通过理解这些差异,可以更有效满足构建需求。
使用对象存储简化后的构建流程:
使用 PVC 简化后的构建流程:
通过对比可知:
在构建效率方面,对象存储场景由于涉及到 拉取解压 和 压缩上传 缓存数据,而 PVC 场景在 Pod 启动时将缓存挂载到缓存目录,因此前者比后者相对低。
在隔离性方面,对象存储的缓存数据的隔离级别是 工作流中服务组件,而 PVC 场景是同一个 PVC 的 /<构建缓存目录>,故前者比后者好。
另外,在接下来即将推出的 v1.11.0 版本中,我们将对 PVC 场景支持 subpath,使得集群级别配置 PVC 时,缓存数据的隔离性可以达到和对象存储相同,敬请期待。
基于上述分析,推荐如下的使用方式:
不同技术栈的最佳实践
下述示例在缓存介质的配置方面没有差别,可参考上述最佳实践选择合适的缓存介质,不同开发语言在构建缓存的使用中,差异点集中在缓存目录的配置。
Java
以 Maven 构建工具为例,缓存路径可通过 $M2_HOME 环境变量控制,可在构建脚本中显式修改。对于 Zadig 自带的 Maven 构建工具,Maven 构建缓存路径是 $WORKSPACE/.m2/ 。
在应用构建缓存配置的自定义目录中,可以填写 $WORKSPACE/.m2/ ,或依据构建环境指定 Maven 的缓存路径。
Golang
Golang 缓存路径通过 $GOCACHE 环境变量控制,可在构建脚本中显式修改。
在应用构建缓存配置的自定义目录中,可以填写上述配置的 $GOCACHE 路径。
NodeJS
NodeJS 缓存路径通常是在代码库的 node_modules/ 目录下,可以参考 stackflow 上推荐的一种做法使用构建缓存:
在应用构建缓存配置的自定义目录中,填写一个非代码仓库所在的路径,如 $WORKSPACE/.cache
构建脚本中,将 package.json 拷贝到缓存目录 (如上述 $WORKSPACE/.cache),执行 npm install,然后再将缓存目录中的 node_modules/ 目录拷贝到代码库下,如下:
一起参与优化
为了给 Zadig 用户提供更好的触达渠道,倾听和探讨对于构建效率的问题和使用方法,Zadig 架构师 2022.04.07 组织了一场实践讨论会,在线答疑解惑。
会议主题:Zadig 构建相关问题最佳实践讨论
会议时间:2022.04.07 北京时间下午 16:00 ~ 17:00
会议链接:https://meeting.tencent.com/dm/3MmOTocUTUk8
Zadig,让工程师更专注创造!欢迎加入开源吐槽群🔥
版权声明: 本文为 InfoQ 作者【Geek_291cde】的原创文章。
原文链接:【http://xie.infoq.cn/article/315ed2302ee536af80258905a】。文章转载请联系作者。
评论