为了快速响应业务需求,构建效率的提升是提高团队生产力和响应市场变化的核心。为了实现这一目标,构建缓存配置成为了一个不可或缺的环节。通过缓存策略配置,我们可以显著减少构建过程中的冗余任务,避免不必要的资源浪费,从而加快从代码提交到产品上线的整个流程。
在本文中,我们将深入分析如何通过 Zadig 的构建缓存配置,结合 Java、Golang 和 NodeJS 的最佳实践,来优化和加速构建过程。
# 如何选择缓存存储介质
选择合适的缓存介质对于提升构建效率至关重要。Zadig 同时支持在 Kubernetes 和主机上执行构建任务,针对不同的基础设施可以选择使用不同的缓存介质。
- Kubernetes 构建:支持使用「对象存储」和 「集群资源」(即 PVC)作为缓存介质
- 主机构建:支持使用「主机存储资源」作为缓存介质
# Kubernetes 构建缓存介质选择
在 Kubernetes 环境中,您可以选择使用「对象存储」或「集群存储」(PVC)作为缓存介质。这两种方案在构建效率和缓存隔离性方面各有所长。通过深入比较它们的缓存机制,可以更好地理解它们之间的差异,从而做出适合您项目需求的选择。
使用对象存储缓存机制如下:
使用 PVC 缓存机制如下:
通过对比可知:
构建效率 | 缓存隔离性 | |
---|---|---|
对象存储 | 相对低 | 相对固定 |
PVC | 相对高 | 相对灵活 |
在构建效率方面,对象存储场景由于涉及到 拉取解压 和 压缩上传 缓存数据,而 PVC 场景在 Pod 启动时将缓存挂载到缓存目录,因此前者比后者相对低。
在隔离性方面,对象存储的缓存数据的隔离级别仅支持 工作流中服务组件,而 PVC 场景是同一个 PVC 的 <构建缓存目录>, 既支持工作流服务组件共享缓存也支持不同工作流不同服务共享缓存,故后者相对前者更为灵活。
基于上述分析,推荐如下的使用方式:
- 缓存介质选择:若不同项目或服务需共享构建缓存,推荐使用 PVC。否则,对象存储是更佳选择。
- 缓存目录配置:在服务构建配置中,建议采用自定义目录,仅包含缓存数据以提高效率,并避免代码冲突。
# 主机缓存介质
使用主机构建直接可以使用主机存储资源进行缓存,提升构建效率,主机构建缓存机制如下:
# 如何使用构建缓存
# Kubernetes 构建缓存配置
Zadig 很重视用户体验,为开发者提供 source->可靠交付物 的最短路径,故在构建缓存的配置中,分别从 集群级别 和 构建级别 进行配置:
- 在低频操作的集群管理中配置缓存介质
- 在高频操作的服务构建中配置缓存路径
通过下述两步配置,运行在指定集群的构建任务即可使用相应的存储介质作为构建缓存。
# 步骤 1:配置集群级别的缓存介质
系统管理员访问 系统设置
-> 集群管理
,编辑集群配置,可选择对象存储或者集群存储作为缓存介质。系统还支持对不同的项目/工作流/服务组件实现独享缓存,可参考 缓存配置 | Zadig 文档 (opens new window) 。
# 步骤 2:配置服务构建使用缓存
在服务构建的高级配置中,进行缓存使用的配置,选择开启缓存,并配置缓存目录,可参考 构建配置 | Zadig 文档 (opens new window)
# 主机构建缓存配置
主机构建的缓存直接存储于执行任务的本地主机,简化了配置流程。只需在构建任务中开启缓存并配置缓存目录即可。
# 不同技术栈的最佳实践
下述示例在缓存介质的配置方面没有差别,可参考上述最佳实践选择合适的缓存介质,不同开发语言在构建缓存的使用中,差异点集中在缓存目录的配置。
# Java
以 Maven 构建工具为例,其默认配置文件位于 ${M2_HOME}/conf/settings.xml
文件中,可在软件包管理 (opens new window)中指定 localRepository
来设置缓存目录,并在构建配置中指定缓存目录。
- 在 Maven 软件包配置中指定
localRepository
为$WORKSPACE/.m2/repository
。如下图所示。
- 使用 Maven 软件包,开启缓存配置并设置自定义目录
$WORKSPACE/.m2/repository
。
# Golang
Golang 缓存路径通过 $GOCACHE 环境变量控制,可在构建脚本中显式修改。
在应用构建缓存配置的自定义目录中,可以填写上述配置的 $GOCACHE 路径。
# NodeJS
NodeJS 缓存路径通常是在代码库的 /node_modules 目录下。在构建脚本中使用 npm install <*> -g --prefix <指定目录>
,再在高级配置中将目录缓存即可。