Zadig 构建 vs. Jenkins、GitLab 构建

时间:2022-10-02 19:06:25

Zadig 构建 vs. Jenkins、GitLab 构建

有了 Jenkins、GitLab 构建为什么还要用 Zadig ?它究竟有何独到之处?

其实 Zadig 构建主要在微服务架构和云原生技术趋势下,经过大量企业实践而诞生的,它是基于容器运行时环境提供的高效云原生构建引擎。

本文对常规的构建过程不做赘述,主要针对 Zadig 构建的差异化功能做介绍和实践,通过实践让大家逐一了解和体验。其中包含并行构建、构建模版、多服务共享构建、利用 Serverless 资源构建等。

并行构建

‍ 一次工作流并行构建多个服务,微服务架构下开发更方便,业务验证效率大幅提升

同一工作流同一任务的并发

Zadig 系统的工作流可同时触发多个服务的部署更新。仅执行一次工作流,即可触发多个服务被同时执行构建->部署->测试->分发流程,不同服务的构建发布过程彼此独立互不干扰,如下图所示。

Zadig 构建 vs. Jenkins、GitLab 构建

 

同一工作流不同任务的并发

Zadig 同一工作流任务支持并发执行,在工作流中选择并发运行,可以开启工作流任务的并发能力。当多个开发者分别触发该工作流部署更新不同的服务时,产生的多个工作流任务将会并发执行,后者无需等待,最大限度地提升协作效率。

如果触发的工作流任务里不包含部署阶段,则即使使用工作流更新相同的服务,同一工作流的多个任务也可并发执行。

Zadig 构建 vs. Jenkins、GitLab 构建

目前同一个工作流多个不同的任务支持的并发规则如下:

场景介绍

手动触发

定时触发

Webhook 触发

不同服务,同时构建

x

相同服务,同时构建

x

不同服务,构建部署到同环境

不同服务,构建部署到不同环境

相同服务,构建部署到不同环境

x

x

相同服务,构建部署到同环境

x

x

x

 

值得注意的是 Zadig 构建并发数依赖系统资源的上限,需要管理员在系统设置针对自身情况设置合理的 任务并发数配额 [1] 

构建模板

根据不同项目、不同技术栈特征,制定若干套构建模版,一套模版可以支持数百微服务,运维规范更易落地,运维成本降低数倍

新建构建模板

  • 依次访问项目-> 模板库 -> 构建 进入构建模板管理页面。

Zadig 构建 vs. Jenkins、GitLab 构建

  • 点击 + 按钮 -> 填写模板名称 -> 填写模板配置后保存。

Zadig 构建 vs. Jenkins、GitLab 构建

其中构建环境、构建变量及构建脚本,可参考 构建配置 [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

 

使用构建模板

创建构建时选择使用模板 -> 填写构建名称并选择构建模板 -> 选择服务并按需配置代码信息后保存即可。

Zadig 构建 vs. Jenkins、GitLab 构建

多服务共享构建

同一个项目多个服务可以共享一套构建脚本,不易出错,还更利于共享维护

如何配置共享构建

以 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

Zadig 构建 vs. Jenkins、GitLab 构建

如何使用共享构建

创建构建配置时指定多个服务,或者创建构建完毕后修改构建,在服务选择中选择多个服务。

Zadig 构建 vs. Jenkins、GitLab 构建

Zadig 构建 vs. Jenkins、GitLab 构建

也可以在为服务配置构建时,按需选择复用已有的构建配置实现构建共享。

Zadig 构建 vs. Jenkins、GitLab 构建

 

利用 Serverless 资源构建

单独为构建配置 Serverless 弹性资源,应对日常构建频繁的场景,用多少花多少避免浪费

配置构建集群

目前对腾讯云 EKS 弹性集群已做全面兼容,云厂商购买集群资源后,通过系统设置->集群管理 添加集群即可。

Zadig 构建 vs. Jenkins、GitLab 构建

使用构建集群

在构建设置中打开高级配置,选择 Serverless 集群资源。

Zadig 构建 vs. Jenkins、GitLab 构建

Zadig 构建不仅于此,对技术细节感兴趣的同学建议参考以往推文:

Zadig 构建缓存如何配置才好用?

Zadig 构建效率提升 40% 背后的实践思路

参考链接:

[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,让工程师更专注创造!

欢迎加入 开源吐槽群????

Zadig on Github

Zadig on Gitee