Zadig 提供了面向容器运行时环境、大规模微服务的云原生持续交付方案,被企业和社区广泛采用。在实际使用中,批量服务接入 ok 了,多套环境拉起完美了,最后却在构建上遭遇滑铁卢:一个工作流任务耗时很长才结束,多个工作流任务一直在排队等待...
这 Zadig 到底该怎么用,才能让构建效率最大化?别慌,最佳实践姿势和常见排障思路来了。下面我们给出能提升构建效率的系统配置实践,就 Java/Golang/NodeJS 技术栈给出 demo 示例,并在文末提供一些关于构建效率常见的优化思路。
集群配置
集群缓存配置
系统管理员访问 系统设置 -> 集群管理 ,编辑集群配置,缓存资源使用集群 PVC 存储。系统还支持对不同的项目/工作流/服务组件实现独享缓存,可参考 缓存配置 | Zadig 文档 [1]。
经测试,相比对象存储缓存,使用集群 PVC 缓存平均可提升构建效率 40%+。
Dind 配置
在集群管理里修改 Dind 资源配置,按需调整 Dind 副本数和资源规格,并使用集群存储资源作为镜像缓存。
-
设置 Dind 多副本后,同一个服务的构建任务会被尽可能调度到同一个 Dind 实例,不同服务的构建任务会被尽可能打散调度到不同的 Dind 实例,避免因单个 Dind 实例承载过多的构建任务而增加失败概率。
-
使用集群存储资源可避免因 Dind 重启后导致已有缓存失效的问题。
项目配置
构建缓存配置
修改构建,开启缓存配置,在自定义目录中指定需要缓存的目录。下文中也提供了 Java/Golang/NodeJS 技术栈的构建缓存配置示例。
工作流配置
编辑工作流,开启并发运行策略。开启后,当多个工作流任务先后产生时无需排队等待即可并发执行,缩****短整体执行时间。
工作流任务并发数依赖系统资源的上限,系统管理员可根据实际情况设置,参考:任务并发数[2]。
Demo 示例
下面分别演示 Java、Golang、NodeJS 技术栈中,构建缓存具体该如何配置。
Java
以 Maven 构建工具为例,其默认配置文件位于 ${M2_HOME}/conf/settings.xml 文件中,可在安装软件包时指定 localRepository 来设置缓存目录,并在构建配置中指定。
以 Zadig 内置的 maven 3.3.9 为例说明,安装时指定 localRepository 为 $WORKSPACE/.m2/repository**。**
mkdir -p $HOME/maventar -C $HOME/maven -xzf ${FILEPATH} --strip-components=1# customize .m2 direxport M2_HOME=$HOME/mavenmkdir -p $WORKSPACE/.m2/repositorycat >$HOME/maven/conf/settings.xml <<EOF<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>$WORKSPACE/.m2/repository</localRepository> <pluginGroups/> <servers/> <mirrors> <mirror> <id>repo1</id> <mirrorOf>central</mirrorOf> <name>repo1</name> <url>http://repo1.maven.org/maven2</url> </mirror> </mirrors> <profiles/></settings>EOF
构建缓存配置如下:
Golang
Golang 缓存路径通过 $GOCACHE 环境变量控制,可在构建脚本中显式修改。在应用构建缓存配置的自定义目录中,可以填写上述配置的 $GOCACHE 路径。
NodeJS
在构建脚本中使用 npm install <*> -g --prefix <指定目录>****,再在高级配置中将目录缓存即可。
优化指南
-
系统按照下载依赖软件包 -> 拉取代码 -> 执行构建脚本 -> 推送构建镜像到镜像仓库的顺序来执行构建,每一个环节对于网络的需求因构建配置而异,可根据具体配置确定集群所在的节点是否存在网络问题。
-
对于执行构建脚本耗时长的情况,可以在脚本中每一个步骤执行前后增加时间戳输出,统计每一步的耗时,找到耗时长的步骤后有的放矢的解决。
-
更多排查思路可阅读:诊断手册 [3]。
参考链接:
[1] docs.koderover.com/zadig/v1.13…
[2] docs.koderover.com/zadig/v1.13…
[3] docs.koderover.com/zadig/v1.13…
Zadig,让工程师更专注创造。