Zadig 构建技巧四讲:并行构建、模板使用、多服务共享、Serverless 构建

Zadig 四步构建法:并行加速、模板提效、共享简化、Serverless 节省,为云原生微服务注入高效动力。

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

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

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

# 并行构建

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

# 同一工作流并发执行

同一工作流具备同时处理多个执行实例的能力,在工作流高级配置中修改执行并发数,可以开启工作流的并发能力。当多个开发者分别触发该工作流部署更新不同的服务时,这些任务将会同时进行,无需等待其他任务完成,最大限度地提升协作效率。

值得注意的是 Zadig 工作流执行并发数依赖系统资源的上限,需要管理员在系统设置针对自身情况设置合理的 任务并发数配额 (opens new window)

# 工作流同阶段任务并发执行

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

# 构建模版

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

# 配置构建模板

依次访问资产管理-> 模板库 -> 构建 进入构建模板管理页面。点击 + 按钮,填写模板名称,参考构建配置 (opens new window)完成构建模板的配置。

模板中的代码信息部分无需配置,在使用构建模板为服务创建构建时再配置。

小贴士

结合使用构建变量 $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

使用构建模板创建构建时,按照顺序完成对应代码库的配置即可

# 使用构建模板

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

代码信息中的相关参数说明可参考:代码信息说明 (opens new window)

如果模板中定义了变量,则可以在构建中定义变量值,如下图所示。

# 批量录入

点击批量录入,可批量配置使用模板的服务和代码仓库信息

构建环境、构建变量及构建脚本,可参考构建配置 (opens new window),代码信息在构建模板中是无需配置的,使用构建模板为服务创建构建时可以自定义配置。

结合使用构建变量 $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 (opens new window)为例,该项目包括 3 个 Golang 服务 service1/service2/service3,和构建相关的目录结构说明如下:

├── Dockerfile # 定义 3 个服务的 Dockerfile
├── Makefile   # 定义 3 个服务的编译
├── src        # 3 个服务的源代码
   ├── service1
   ├── service2
   └── service3

步骤 1:创建构建

创建 Zadig 构建,按需配置构建环境、代码信息、通用构建脚本等,利用系统提供变量实现构建的共享,本示例中的构建脚本如下:

cd zadig/examples/multi-service-demo
make build-$SERVICE
docker build -t $IMAGE -f Dockerfile --build-arg service=$SERVICE .
docker push $IMAGE

步骤 2:关联服务

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

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

# 如何使用共享构建

编辑工作流的「构建」任务,选择服务和对应的构建,即可实现多个服务共享同一构建。

# 利用 Serverless 资源构建

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

# 配置构建集群

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

# 使用构建集群

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

Zadig 构建不仅于此,期待更多人分享你的构建场景。

Zadig,让工程师更专注创造。

Background Image

作为一名软件工程师,我们一直给各行各业写软件提升效率,但是软件工程本身却是非常低效,为什么市面上没有一个工具可以让研发团队不这么累,还能更好、更快地满足大客户的交付需求?我们是否能够打造一个面向开发者的交付平台呢?我们开源打造 Zadig 正是去满足这个愿望。

—— Zadig 创始人 Landy