Zadig 提供了面向容器运行时环境、大规模微服务的云原生持续交付方案,被企业和社区广泛采用。在实际使用中,批量服务接入 ok 了,多套环境拉起完美了,最后却在构建上遭遇滑铁卢:一个工作流任务耗时很长才结束,多个工作流任务一直在排队等待...
这 Zadig 到底该怎么用,才能让构建效率最大化?别慌,最佳实践姿势和常见排障思路来了。下面我们给出能提升构建效率的系统配置实践,就 Ja va/Golang/NodeJS 技术栈给出 demo 示例,并在文末提供一些关于构建效率常见的优化思路。
集群配置
集群缓存配置
系统管理员访问 系统设置 -> 集群管理,编辑集群配置,缓存资源使用集群 PVC 存储。系统还支持对不同的项目/工作流/服务组件实现独享缓存,可参考 缓存配置 | Zadig 文档。
经测试,相比对象存储缓存,使用集群 PVC 缓存平均可提升构建效率 40%+。

Dind 配置
在集群管理里修改 Dind 资源配置,按需调整 Dind 副本数和资源规格,并使用集群存储资源作为镜像缓存。
- 设置 Dind 多副本后,同一个服务的构建任务会被尽可能调度到同一个 Dind 实例,不同服务的构建任务会被尽可能打散调度到不同的 Dind 实例,避免因单个 Dind 实例承载过多的构建任务而增加失败概率。
- 使用集群存储资源可避免因 Dind 重启后导致已有缓存失效的问题。

构建缓存配置
修改构建,开启缓存配置,在自定义目录中指定需要缓存的目录。下文中也提供了 Ja va/Golang/NodeJS 技术栈的构建缓存配置示例。
工作流配置
编辑工作流,开启并发运行策略。开启后,当多个工作流任务先后产生时无需排队等待即可并发执行,缩短整体执行时间。
工作流任务并发数依赖系统资源的上限,系统管理员可根据实际情况设置,参考:任务并发数。

Demo 示例
下面分别演示 Ja va、Golang、NodeJS 技术栈中,构建缓存具体该如何配置。
Ja va
就拿Ma ven构建工具来说吧,它的默认配置文件在${M2_HOME}/conf/settings.xml文件里,咱们可以在安装软件包的时候通过指定localRepository来设置缓存目录,然后在构建配置里再去指定它。这里以Zadig内置的ma ven 3.3.9为例来给大家讲讲,安装的时候把localRepository指定为$WORKSPACE/.m2/repository。
mkdir -p $HOME/ma ven
tar -C $HOME/ma ven -xzf ${FILEPATH} --strip-components=1
# customize .m2 dir
export M2_HOME=$HOME/ma ven
mkdir -p $WORKSPACE/.m2/repository
cat >$HOME/ma ven/conf/settings.xml <
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ma ven.apache.org/SETTINGS/1.0.0 http://ma ven.apache.org/xsd/settings-1.0.0.xsd">
$WORKSPACE/.m2/repository
repo1
central
repo1
http://repo1.ma ven.org/ma ven2
EOF构建缓存配置如下:
Golang
Golang 缓存路径通过 $GOCACHE 环境变量控制,可在构建脚本中显式修改。 在应用构建缓存配置的自定义目录中,可以填写上述配置的 $GOCACHE 路径。
NodeJS
在构建脚本中使用 npm install <*> -g --prefix <指定目录>,再在高级配置中将目录缓存即可。
优化指南
- 系统按照下载依赖软件包 -> 拉取代码 -> 执行构建脚本 -> 推送构建镜像到镜像仓库的顺序来执行构建,每一个环节对于网络的需求因构建配置而异,可根据具体配置确定集群所在的节点是否存在网络问题。
- 对于执行构建脚本耗时长的情况,可以在脚本中每一个步骤执行前后增加时间戳输出,统计每一步的耗时,找到耗时长的步骤后有的放矢的解决。
- 更多排查思路可阅读:诊断手册 | Zadig 文档。
Zadig,让工程师更专注创造。
欢迎加入 开源吐槽群
Zadig on Github
Zadig on Gitee