有了 Jenkins、GitLab 构建为什么还要用 Zadig ?它究竟有何独到之处?
其实 Zadig 构建主要在微服务架构和云原生技术趋势下,经过大量企业实践而诞生的,它是基于容器运行时环境提供的高效云原生构建引擎。
本文对常规的构建过程不做赘述,主要针对 Zadig 构建的差异化功能做介绍和实践,通过实践让大家逐一了解和体验。其中包含并行构建、构建模版、多服务共享构建、利用 Serverless 资源构建等。
并行构建
一次工作流并行构建多个服务,微服务架构下开发更方便,业务验证效率大幅提升
同一工作流同一任务的并发
Zadig 系统的工作流可同时触发多个服务的部署更新。仅执行一次工作流,即可触发多个服务被同时执行构建
->部署
->测试
->分发
流程,不同服务的构建发布过程彼此独立互不干扰,如下图所示。
同一工作流不同任务的并发
Zadig 同一工作流任务支持并发执行,在工作流中选择并发运行
,可以开启工作流任务的并发能力。当多个开发者分别触发该工作流部署更新不同的服务时,产生的多个工作流任务将会并发执行,后者无需等待,最大限度地提升协作效率。
如果触发的工作流任务里不包含部署阶段,则即使使用工作流更新相同的服务,同一工作流的多个任务也可并发执行。
目前同一个工作流多个不同的任务支持的并发规则如下:
场景介绍 |
手动触发 |
定时触发 |
Webhook 触发 |
不同服务,同时构建 |
√ |
√ |
x |
相同服务,同时构建 |
√ |
√ |
x |
不同服务,构建部署到同环境 |
√ |
√ |
√ |
不同服务,构建部署到不同环境 |
√ |
√ |
√ |
相同服务,构建部署到不同环境 |
x |
x |
√ |
相同服务,构建部署到同环境 |
x |
x |
x |
值得注意的是 Zadig 构建并发数依赖系统资源的上限,需要管理员在系统设置
针对自身情况设置合理的 任务并发数配额 [1] 。
构建模板
根据不同项目、不同技术栈特征,制定若干套构建模版,一套模版可以支持数百微服务,运维规范更易落地,运维成本降低数倍
新建构建模板
-
依次访问
项目
->模板库
->构建
进入构建模板管理页面。
-
点击 + 按钮 -> 填写模板名称 -> 填写模板配置后保存。
其中构建环境、构建变量及构建脚本,可参考 构建配置 [2],代码信息在构建模板中是无需配置的,使用构建模板为服务创建构建时可以自定义配置。
结合使用构建变量 $REPONAME_<index>
可巧妙的完成构建模板的配置,比如服务的源代码及编译配置在 A 仓库,Dockerfile 文件在 B 仓库,构建配置中的脚本可组织如下,使用模板时,可按照顺序完成对应代码库的配置即可。
#!/bin/bash
set -ex
cd $WORKSPACE/$REPONAME_0/service/
cp $WORKSPACE/$REPONAME_1/dockerfiles/$SERVICE.Dockerfile .
make build
docker build -t $IMAGE -f $SERVICE.Dockerfile .
docker push $IMAGE
使用构建模板
创建构建时选择使用模板
-> 填写构建名称并选择构建模板 -> 选择服务并按需配置代码信息后保存即可。
多服务共享构建
同一个项目多个服务可以共享一套构建脚本,不易出错,还更利于共享维护
如何配置共享构建
以 multi-service-demo [3]为例,该项目包括 3 个 Golang 服务service1/service2/service3,构建相关的目录结构说明如下:
├── Dockerfile # 定义 3 个服务的 Dockerfile
├── Makefile # 定义 3 个服务的编译
├── src # 3 个服务的源代码
├── service1
├── service2
└── service3
创建 Zadig 构建,服务选择
中选择多个服务,按需配置构建环境、代码信息、通用构建脚本等,利用系统提供变量实现构建的共享,本示例中的构建脚本如下:
cd zadig/examples/multi-service-demo
make build-$SERVICE
docker build -t $IMAGE -f Dockerfile --build-arg service=$SERVICE .
docker push $IMAGE
如何使用共享构建
创建构建配置时指定多个服务,或者创建构建完毕后修改构建,在服务选择
中选择多个服务。
也可以在为服务配置构建时,按需选择复用已有的构建配置实现构建共享。
利用 Serverless 资源构建
单独为构建配置 Serverless 弹性资源,应对日常构建频繁的场景,用多少花多少避免浪费
配置构建集群
目前对腾讯云 EKS 弹性集群已做全面兼容,云厂商购买集群资源后,通过系统设置->集群管理
添加集群即可。
使用构建集群
在构建设置中打开高级配置,选择 Serverless 集群资源。
Zadig 构建不仅于此,对技术细节感兴趣的同学建议参考以往推文:
参考链接:
[1] https://docs.koderover.com/zadig/v1.12.0/settings/system-settings/#任务并发数设置
[2] https://docs.koderover.com/zadig/v1.12.0/project/build/
[3] https://github.com/koderover/zadig/tree/main/examples/multi-service-demo
Zadig,让工程师更专注创造!